4

我意识到有很多这种性质的问题,但是我无法使用其他帖子解决我的问题,所以我希望这里有人可以帮助我。

我有一个从 Yahoo 本地搜索 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它不起作用。

谢谢(怜悯)

柯克

4

4 回答 4

5

根据$yahoo_json_decoded->ResultSet->Result[$i]->Title您所说的有效:

foreach($yahoo_json_decoded->ResultSet->Result as $index => $result)
{
   $listingID = $result->id ;
    echo $listingID;
}
于 2013-03-26T22:12:28.277 回答
4

两个循环之间的字面区别

for代码段中的循环遍历数组 $yahoo_json_decoded->ResultSet->Resultforeach循环遍历对象 $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" }

看到行动的不同

于 2013-03-26T22:19:03.340 回答
3

据我了解,你应该这样做

foreach($yahoo_json_decoded->ResultSet->Result as $key => $val) //(...)
于 2013-03-26T22:12:43.760 回答
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]
于 2013-03-26T22:12:35.777 回答