Я пытаюсь обновить массив, но массив содержит массивы.
Например,
$data = array( array('name'=>'John','age'=>'19','alive'=>'false'), array('name'=>'Bob','age'=>'32','alive'=>'false'), array('name'=>'Kate','age'=>'22','alive'=>'false'), );
Мне нужно добавить еще один элемент во все эти массивы.
Я пробовал использовать foreach
foreach($data as $onearray){ $onearray['alive'] = 'true'; }
Нужно ли создавать новый массив и добавлять все обновленные массивы в новый?
используйте ссылку:
foreach($data as &$onearray) { $onearray['alive'] = 'true'; } unset($onearray)
и очистить ссылку после этого, поэтому дальнейший код не испортит это
Чтобы иметь возможность напрямую изменять элементы массива в цикле, перед значением $ value нужно указать &. В этом случае значение будет присвоено по ссылке.
см. ссылку foreach для получения дополнительной информации: http://us2.php.net/manual/en/control-structures.foreach.php
Вы пытались использовать ключ массива данных? Вот так:
foreach($data as $key => $onearray){ $data[$key]['alive'] = 'true'; }
(Обратите внимание, что $ onearray никогда не используется)
Еще быстрее:
for($i = 0; $i < count($data); $i++) { $data[$i]['alive'] = 'true'; }
Использовать встроенную функцию array_walk – применить функцию пользователя к каждому члену массива
<?php $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$item1, $key, $prefix) { $item1 = "$prefix: $item1"; } function test_print($item2, $key) { echo "$key. $item2<br />\n"; } echo "Before ...:\n"; array_walk($fruits, 'test_print'); array_walk($fruits, 'test_alter', 'fruit'); echo "... and after:\n"; array_walk($fruits, 'test_print'); ?>
Вывод
Before ...: d. lemon a. orange b. banana c. apple ... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple