配列内の値を表示している次のコードは、単純な for ループを使用した場合とは対照的に、foreach() でラップした場合に異なる結果を示しています。for ループは正しいデータを表示していますが、foreach() は反復ごとに入力配列を修正しているように見えます。
$arr = array_merge($arr1, $arr2);
for ($x = 0; $x < count($arr); $x++) {
echo $arr[90]['circread_value'];
}
foreach ($arr as $unused) {
echo $arr[90]['circread_value'];
}
for ループからの出力は、(予想どおり) 何度も同じ値になります。
1382429.00
1382429.00
1382429.00
1382429.00
...
foreach() からの出力は、配列の 91 番目の要素が反復ごとに変化していることを示しています。
56256.00
45652.00
50726.00
317896.00
...
どうすればいいの?
注: 上記のコードが不自然であることはわかっています (明らかに foreach() 内で、91 番目の要素を見るだけでなく、実際にはさらに処理を行い、繰り返し処理している配列の各要素を参照したいと考えています)。コードを単純なものに単純に戻しました(私のデバッグの一環として、ここに投稿するのと同じくらい!)
詳細情報:
- $arr は、2 つの 91 要素の配列を array_merge して 182 要素の配列を作成することによって作成されています。
- $arr[89]['circread_value'] または $arr[91]['circread_value'] をエコーアウトすると、foreach() からも一貫した値が得られます。
- foreach() に表示される (一見ランダムな) 値は、実際には配列内の他の要素からの値です (foreach を開始する前の配列)
入力配列 ($arr1 および $arr2) は次の場所にあります: http://pastebin.com/wQN8XXu2
洞察をありがとう。詳細については、遠慮なくお尋ねください。