PHP foreach в проблеме foreach - PullRequest
       5

PHP foreach в проблеме foreach

1 голос
/ 10 марта 2011

Я хочу вставить какое-либо значение из первого и второго foreach в базу данных, но я столкнулся с некоторыми проблемами.Я пишу свою проблему в коде.Я не могу решить проблему двух петель.Я прошу помощи.

<?php
header('Content-type:text/html; charset=utf-8');
set_time_limit(0);
require_once ('../conn.php'); 
require_once ('../simple_html_dom.php');
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&q=obama&key={api-key}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $url);
$body = curl_exec($ch);
curl_close($ch);
$data = json_decode($body);
foreach ($data->responseData->results as $result) { 
$title = html_entity_decode($result->titleNoFormatting);
$link = html_entity_decode($result->unescapedUrl);
$html = @file_get_html($link );
foreach(@$html->find('h3') as $element) {
     $table=$element;
         echo $table;// here while the $table is empty, echo is null.  
}
echo $table;// here while the $table is empty, echo will repeat the prev $table value.  
mysql_query("SET NAMES utf8");
 mysql_query("INSERT INTO ...");// I want insert all the $title and $table into database.
} 
echo '<hr />';
}
?>

Я печатаю результат while the $table is empty, echo will repeat the prev $table value.

Organizing for America | BarackObama.com

Barack Obama - Wikipedia, the free encyclopedia

President Barack Obama | The White House
President Obama Nominates William Francis Kuntz, II to the United States District Court//the prev value

Change.gov - The Official Web Site of the
President Obama Nominates William Francis Kuntz, II to the United States District Court//here the $table is empty, it will repeat the prev $table value, and it should be empty.

Barack Obama on Myspace
Idle Friends▼

ob (obama) on Twitter
Piè di pagina

Barack Obama
Advertise with the NY Daily News!

Barack Obama on the Issues
Voting Record

1 Ответ

6 голосов
/ 10 марта 2011

Правила инициализации переменных и области видимости PHP довольно забавные.

Ни в коем случае вы не инициализируете $table.Сначала он ссылается на две глубины.PHP допускает это и не будет жаловаться на это.

Проблема в том, что вы постоянно пытаетесь установить его значение, но вы никогда не сбрасываете его .

Инициализируйте его как null перед внутренним foreach:

$html = file_get_html($link );
$table = null;  // <-- New!
foreach($html->find('h3') as $element) {
     $table = $element;
     echo $table;
}

Это гарантирует, что, когда foreach завершится, $table будет либо null, либоэто будет последний элемент H3 в выбранном вами HTML-документе.(Кстати, если вы действительно хотели получить последний H3, вы, вероятно, можете просто взять массив, который возвращает find, и посмотреть на последний элемент, а не проходить по нему.)

Также, пожалуйста, избавьтесь от @ операторы, подавляющие ошибки, включите error_reporting полностью и убедитесь, что вы включили display_errors.У вас могут быть другие ошибки, скрывающиеся в том, что вы намеренно игнорируете, что приводит к ужасным историям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...