我使用xml导入产品,这是我的代码
$allLangs = Language::getLanguages(true,1,false);
$totalLangs = sizeof($allLangs);
$url = "XMLUrl";
$xml = file_get_contents($url);
$xml = utf8_encode($xml);
$xml = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $xml);
$xml = simplexml_load_string($xml);
foreach ($xml->item as $key => $item) {
$sql10 = "SELECT id FROM product WHERE reference='$item->reference'";
$res10 = Db::getInstance()->getValue($sql10);
if (empty($res10)) {
for ($i=0; $i < $totalLangs; $i++) {
if($allLangs[$i]['iso_code'] == "en") {
$dname[$allLangs[$i]['id_lang']] = trim($item->name);
}else {
$dtname = translate(trim($item->name) , "en" , $allLangs[$i]['iso_code']);
$dname[$allLangs[$i]['id_lang']] = $dtname;
}
}
$product = New Product();
$product->name = $dtname;
...
...
...
$product->save();
}
}
function translate()
function translate($phrase, $from ="en", $to = "de"){
$apiKey = '<ApiKey>';
$url = 'https://www.googleapis.com/language/translate/v2?key=' . $apiKey . '&q=' . rawurlencode($phrase) . '&source='.$from.'&target='.$to;
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($handle);
$responseDecoded = json_decode($response, true);
curl_close($handle);
return $responseDecoded['data']['translations'][0]['translatedText'];
}
我的xml包含更多3500个产品,在foreach循环中我首先检查产品是否存在,如果没有,则通过向Google翻译API发送请求并在翻译后将产品插入数据库中来翻译名称和描述。根据代码,不应该有任何重复的产品,但在导入后,有许多重复的(7,8或9)enteries在数据库中具有相同的引用号。
1 为什么使用与我在foreach循环中的顶部验证相同的参考编号插入多个产品?
2 为什么循环在第一个地方重复?
注意:我已经checched xml没有任何重复的条目。和循环工作正常,没有发送谷歌翻译请求。