2017-01-11 6 views
-2

なぜこのコードは正しく動作しないのですか、何が間違っていますか?キー値のPHPエコーjson

$json = json_encode($myInstance->getData($id)); 
    $result = json_decode($json,true); 
    $i = 0; 
    foreach ($result as $value) { 
     echo '<div>'.$value[$i]['name'].'</div>'; 
     $i++; 
    } 

最初の値は正しく表示されますが、繰り返しはありません。 $value[$i]['name']はイテレーション用にビルドされていませんか? array[1]ではなく、array[0]のみが印刷されます。ありがとう。

+2

私たちがあなたを助けることができるこの情報には十分な情報がありません。 JSONのサンプルを投稿してください。 –

+0

関連するJSONがないと問題が何であるかを知ることは難しいです。また、 '$ myInstance'に関するいくつかの情報、特にそのメソッド' getData'が役立ちます。 –

+0

$ i = 1を宣言すると、それは正しく動作するので、array [1] ['name']の正しいエントリが表示されます。この時点では、jsonエントリは関係ありません。問題は$ value [$ i]に焦点を当てています。なぜ反復しないのですか?それは間違っていますか? – Tobias

答えて

1

ネストされたforeachループを使用する方が良いでしょう。一般的には素晴らしいコーディング方法ではありませんが、あなたがやろうとしている仕事をします。

$json = json_encode($myInstance->getData($id)); 
$result = json_decode($json,true); 

foreach ($result as $value) { 
    foreach($value as $value_detail) { 
     echo '<div>'.$value_detail['name'].'</div>'; 
    } 
} 

あなたのJSONの最初のレベルの項目のすべてと、最初の項目から最初の名前が表示され、2番目の項目から2番目の名前、3番目の項目から第3等の

を通して、あなたのコードがループが

$json配列が3Dであるために発生している問題があります。

[0 => 
    [ 
    ['name' => 'Foo'], ['name' => 'Bar'] 
    ] 
] 

そのような場合、あなたはforeachループが

foreach($result[0] as $value) { 
    echo '<div>'.$value['name'].'</div>'; 
} 

は、データがどのように見えるかを確認するためにvar_dump($result);を試してみてくださいすることができることを見つけるかもしれません。

+0

それは素晴らしいd3v_1です!私はちょうどネストされたループがこの時点で必要である理由を知りません。私はあなたの答えをできるだけ早く受け入れます。 THX a lot :) – Tobias

+0

$ jsonのデータは、キーが0の3D配列です。説明のために私の答えを編集します。 –