我意识到有很多这方面的问题,但是我无法使用其他帖子解决我的问题,所以我希望有人可以帮助我。
我有一个对象,我从雅虎本地搜索API回来。我已将结果传递到json_decode()
并将结果保存到$yahoo_json_decoded
。我可以使用for循环从结果中获取数据并执行以下操作:
echo 'Name: ' . $yahoo_json_decoded->ResultSet->Result[$i]->Title . '<br />' ;
但我似乎无法使foreach工作:
foreach($yahoo_json_decoded->ResultSet as $res=>$variable)
{
$listingID = $yahoo_json_decoded->ResultSet[$res]->id ;
echo $listingID;
}
我可以循环数据并继续前进,但我真的想了解为什么foreach
无效。
谢谢(表示怜悯)
柯克
答案 0 :(得分:5)
根据您说的有效的$yahoo_json_decoded->ResultSet->Result[$i]->Title
:
foreach($yahoo_json_decoded->ResultSet->Result as $index => $result)
{
$listingID = $result->id ;
echo $listingID;
}
答案 1 :(得分:4)
两个循环之间的字面差异
您的代码段中的for
循环遍历 数组 $yahoo_json_decoded->ResultSet->Result
,而foreach
循环遍历 对象 $yahoo_json_decoded->ResultSet
。
换句话说,在for
循环中,您正在按预期迭代 数组元素 ,而在foreach
循环中事实上,你正在迭代 对象属性 。
显示差异
例如,给定此对象:
$json = json_encode(array('result'=>array('apple','orange','lemon')));
$obj = json_decode($json);
考虑这个循环之间的区别:
for ($i=0; $i < count($obj->result); $i++) :
echo $i.' - '.$obj->result[$i].' ';
endfor;
和这个循环:
foreach ($obj as $key=>$val) :
echo $key.' - ';
var_dump($val);
endforeach;
第一个循环的输出将是:
0 - apple 1 - orange 2 - lemon
虽然第二个的输出是:
result - array(3) { [0]=> string(5) "apple" [1]=> string(6) "orange" [2]=> string(5) "lemon" }
答案 2 :(得分:3)
根据我的理解,你应该这样做
foreach($yahoo_json_decoded->ResultSet->Result as $key => $val) //(...)
答案 3 :(得分:2)
你在foreach循环中缺少一层数据结构
foreach($yahoo_json_decoded->ResultSet->Result as $res=>$variable)
{
$listingID = $variable->id ;
echo $listingID;
}
与你的for循环相比
for ($i = 0; $i <10; $i++)
$yahoo_json_decoded->ResultSet->Result[$i]->Title
从而
$i = $res
$variable = $yahoo_json_decoded->ResultSet->Result[$i]