foreach问题中的PHP-foreach
我想将第一个和第二个foreach中的一些值插入数据库,但遇到了一些麻烦。我把我的问题写在代码里。我无法解决双回路问题。我请求帮助foreach问题中的PHP-foreach,php,foreach,Php,Foreach,我想将第一个和第二个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/
<?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 />';
}
?>
PHP的变量初始化和范围规则很有趣 在任何时候都不能初始化
$table
。它首先引用两个foreach
es deep。PHP允许这样做,并且不会对此抱怨
问题是,您不断尝试将其设置为一个值,但从未实际重置它
在内部foreach
之前将其初始化为null
:
$html = file_get_html($link );
$table = null; // <-- New!
foreach($html->find('h3') as $element) {
$table = $element;
echo $table;
}
$html=file\u get\u html($link);
$table=null;//查找('h3')作为$element){
$table=$element;
echo$表;
}
这确保了当foreach
完成时,$table
要么为null
,要么是您获取的HTML文档中的最后一个H3元素。(顺便说一句,如果您确实想要最终的H3,您可能只需要获取find
返回的数组,并查看最后一个元素,而不是循环。)
另外,请摆脱
@
错误静音操作符,一直打开错误报告
,并确保已打开显示错误
。您可能还潜藏着其他故意忽略的错误,这会导致可怕的故事。PHP的变量初始化和范围规则有点滑稽
在任何时候都不能初始化$table
。它首先引用两个foreach
es deep。PHP允许这样做,并且不会对此抱怨
问题是,您不断尝试将其设置为一个值,但从未实际重置它
在内部foreach
之前将其初始化为null
:
$html = file_get_html($link );
$table = null; // <-- New!
foreach($html->find('h3') as $element) {
$table = $element;
echo $table;
}
$html=file\u get\u html($link);
$table=null;//查找('h3')作为$element){
$table=$element;
echo$表;
}
这确保了当foreach
完成时,$table
要么为null
,要么是您获取的HTML文档中的最后一个H3元素。(顺便说一句,如果您确实想要最终的H3,您可能只需要获取find
返回的数组,并查看最后一个元素,而不是循环。)
另外,请摆脱
@
错误静音操作符,一直打开错误报告
,并确保已打开显示错误
。你可能有其他潜在的错误,你是故意忽略的,这会导致恐怖故事。毫无疑问,或者我错了?看看一堆代码,你有什么问题?什么不应该发生,什么不应该发生?@Rocket,如果我想插入数据库,我将使用第二个echo$表代码>(在第一个foreach循环中)。但当我打印结果时,第二位总统奥巴马向美国地区法院提名威廉·弗朗西斯·昆茨,二世//此处$table应该是空的,但它会重复上一个$table值并发出回声。
这是不正确的。毫无疑问,还是我错了?看看一堆代码,你有什么问题?什么不应该发生,什么不应该发生?@Rocket,如果我想插入数据库,我将使用第二个echo$表代码>(在第一个foreach循环中)。但当我打印结果时,第二位奥巴马总统提名威廉·弗朗西斯·昆茨(William Francis Kuntz,II)进入美国地区法院//此处$table应该是空的,但它会重复上一个$table的值并发出回声。
这不正确。太好了,你解决了我的问题,非常感谢。现在,结果将不会重复上一个值。:}<代码>$html=@file\u get\u html($link)在这里,我想避免$link不是html链接,比如rss、pdf。因此文件\u get\u html($link)
将出错,然后停止整个php脚本。我认为如果它不是一个真正的html链接,$table
会将一个空值插入到数据库中。肯定有更好的方法来确定此信息,而不是抑制错误file\u get\u html
只需执行一个file\u get\u contents
,然后将生成的字符串加载到一个新的简单html DOM对象中。您可以自己执行该步骤,在创建对象之前检测HTML。很好,您解决了我的问题,非常感谢。现在,结果将不会重复上一个值。:}<代码>$html=@file\u get\u html($link)在这里,我想避免$link不是html链接,比如rss、pdf。因此文件\u get\u html($link)
将出错,然后停止整个php脚本。我认为如果它不是一个真正的html链接,$table
会将一个空值插入到数据库中。肯定有更好的方法来确定此信息,而不是抑制错误file\u get\u html
只需执行一个file\u get\u contents
,然后将生成的字符串加载到一个新的简单html DOM对象中。您可以自己执行该步骤,在创建对象之前检测HTML。