foreach循环重复迭代

时间:2017-09-23 17:38:44

标签: php mysql

我使用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没有任何重复的条目。和循环工作正常,没有发送谷歌翻译请求。

0 个答案:

没有答案