Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
foreach问题中的PHP-foreach_Php_Foreach - Fatal编程技术网

foreach问题中的PHP-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/

我想将第一个和第二个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 />';
}
?>

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)文件\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)文件\u get\u html($link)
将出错,然后停止整个php脚本。我认为如果它不是一个真正的html链接,
$table
会将一个空值插入到数据库中。肯定有更好的方法来确定此信息,而不是抑制错误
file\u get\u html
只需执行一个
file\u get\u contents
,然后将生成的字符串加载到一个新的简单html DOM对象中。您可以自己执行该步骤,在创建对象之前检测HTML。