私はこのように書きMySQLのから得られたデータセットがあります。PHPの "foreach"構造の無視またはバグ?
Array ( [0] => Array ( [views] => 14 [timestamp] => 06/04 [views_scaled] => 4.9295774647887 [unix_time] => 1239022177 ) [1] => Array ( [views] => 1 [timestamp] => 19/04 [views_scaled] => 0.35211267605634 [unix_time] => 1240194544 ) ... ... ... ) 1
(それは後処理だ、「タイムスタンプは本当に前にタイムスタンプだったが、それはとにかく問題ではありません)
配列を$results
に保存されている、と私のコードの途中で私はこのような何かされています
$results = array_merge($results, $new_days); $a = $results; foreach ($results as $row) { $unix_time[] = $row['unix_time']; } $b = $results;
問題:$a
と$b
ARを両方とも異なっている。最初のものは想定されている配列を示し、2番目の配列は同じcount()
ですが、4番目の要素は最後のものと重複しています。私が知る限り、私は参照によって何も渡していないので、$results
は変更するつもりはありません(ポインタかもしれませんが、内容はありません)。私はMac OS X 10.5.2でPHP 5.2.4を使用しています。
明白な質問:これは何らかの形で意図された動作、バグ、または私はここで何か間違っていますか? (ブーリアン回答ではありません)
編集:ありがとうございます、私は投稿する必要がありますどのくらいの余分なコードを正確にはわからない、私は以前から多くのことをしないDBおよび
foreach
を使用してタイムスタンプを解析し、欠落した日の新しい配列(
$new_days
)を作成します。これはすべて正常に動作しています。
このコードは、私が早く投稿したものの後に書きます:
array_multisort($unix_time, SORT_ASC, $results); $days = implode('|', array_pluck('timestamp', $results)); $views = implode('|', array_pluck('views', $results)); $views_scaled = implode(',', array_pluck('views_scaled', $results));
EDIT 2(
array_pluck()
は、典型的なDB-ダンプデータセット内の列から配列を生成するために、カスタム関数です) :もう一度、
the full snippetと
$results
アレイ
$a
と
$b
からの出力(コードのコメントでも参照されています)があります。
これは含まれているコードの意図された動作ではありません。 foreachのバグでもありません。 $ a = $ resultsの間に使用している_exact_コードを使用する必要があります。最終的に$ aと$ bを印刷したとき。 – Calvin
私の友人は、奇妙なことに聞こえるかもしれませんが、正確なコードです。私はこのコード($ aと$ b)の変数で表された各点でexit(print_r())を使いました。 – lima
$ new_daysの内容は何ですか、タイムスタンプを解析するためにどのような関数を使用しますか?タイムスタンプをforeachするために使用されるコードを見ることができますか?あなたがその出力を見る前に、あなたが配列に何をするかはどうなりますか?今まで私たちに示してきたこのセクションの後に、配列のプリントを置くことはできますか? – Louis