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

2つのループの文字通りの違い

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

2番目の出力は次のようになります。

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 に答える