2013-01-04 202 views
0

在这段代码中,有两个foreach。当我单独使用它时,它运行良好。但是,它不能一起工作。我一直在努力解决这个问题了两天..php,foreach在foreach

$urls = nl2br($this->input->post('urls')); 
$result = explode("<br />", $urls); 

$n = 0; 
foreach($result as $row) 
{ 
$n++; 
    $Google_Play_URL = $row; 
    $string = file_get_contents($Google_Play_URL); 

    $dom = new DOMDocument(); 
    @$dom->loadHTML($string); 
    $anchors = $dom->getElementsByTagName('a'); 

    $i = 0; 
    foreach ($anchors as $anchor) 
    { 
    $i++; 

     if ($anchor->nodeValue === 'Email Developer') { 
      $email = str_replace('mailto:', '', $anchor->getAttribute('href')); 

      if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
       echo $email; 

       $id = $this->session->userdata(SESSION_USERID); 

       $country = 'US'; 
       $type = 'android'; 

       $query = 'SELECT idx FROM db_advertisers WHERE email = "'.$email.'"'; 
       $result = $this->db->query($query); 

       if($result->num_rows() < 1) 
       { 
        $query = 'INSERT INTO db_advertisers (email, type, url, country, submit_user) VALUES ("'.$email.'", "'.$type.'", "'.$Google_Play_URL.'", "'.$country.'", "'.$id.'")'; 
        $this->db->query($query); 
       } 
      } 
     } 
    } 

}

当我发送多个值,该代码只能保存一个数据。它假设保存多个数据。你能看到问题吗?

+1

您正在重置循环内的$ result,将其用于新的查询结果 –

+0

@MarkBaker我已经更改了$ result - > $ result_data,但它仍然只保存第一个数据。 – Jake

回答

5

唯一明显的问题是,在内部foreach循环,要设置

$result = $this->db->query($query); 

这是你在外层的foreach循环

foreach($result as $row) 

改变可变一个具有相同的变量名字应该解决这个问题。

+0

它仍然只保存一个数据。 – Jake