2012-10-23 7 views
11

配列のデータに対してクリーンアップジョブを実行しようとしています。具体的には、エポック時間をYYYY-MM-DDに変換しています。配列内のデータをforeachループで更新できないのはなぜですか?

私はもともと、この機能を試してみました:

foreach ($data as $row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 
} 

echo '<pre>'; 
print_r($data); 
echo '</pre>'; 

をするときに、私は、出力foreachループは、データを更新しませんでしたが。ループのために、以下の

は仕事をした:

for ($i=0; $i<count($data); $i++) { 
    $data[$i]['eventdate'] = date('Y-m-d', $data[$i]['eventdate']); 
} 

なぜ最初のループは失敗と第二作業ましたか?彼らは同じではありませんか?

答えて

29

)(未設定でそれを破壊することをお勧めします。

$row&を追加することにより、参照にアップデートしてみてください:

あなたは、キー/値のメソッドを使用することができます
foreach ($data as &$row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 

または、:foreach文では、あなたが必要なので

foreach ($data as $index => $row) { 
    $data[$index]['eventdate'] = date('Y-m-d', $row['eventdate']); 
+0

詳細な説明と例をありがとう! – Choy

+1

@Choy最初の警告[here](http://php.net/manual/en/control-structures.foreach.php)もご覧ください。 –

7

最初の例は、参照ではなく値によって行を渡します。直接&を有するループ プリの$値内の配列要素を変更できるようにするためにドキュメント

から

。その場合、値は、いずれかのパス参照

foreach ($data as &$row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 
} 

又は使用より明示的な構文重要また

foreach ($data as $key => $value) { 
    $data[$key]['eventdate'] = date('Y-m-d', $value['eventdate']); 
} 

によって参照したがって

によって割り当てられますが、この警告でありますdocs

$ valueと最後の配列要素は、 foreachループの後でも残ります。あなたが現在いる方法、foreach ($data as $row) {foreachループを使用している場合は、$rowは「バイ値」ではなく、「参照による」に使用されている

関連する問題