Ben*_*edt 14 php arrays foreach loops associative-array
我有一个非常基本的问题,但我被卡住了.我是php的新手,我有一个像这样的数组:
$array = array(
'one' => 1,
'two' => array('key1' => 'val1','key2' => 'val2'),
'three' => array('key1' => 'val1','key2' => 'val2'),
'four' => array('key1' => 'val1','key2' => 'val2')
);
Run Code Online (Sandbox Code Playgroud)
对于数组中的每个数组(即'two,'three'和'four'),我想在这些数组中插入'key3'=>'val3'.
我试过这个:
foreach($array as $item) {
if (gettype($item) == "array") {
$item['key3'] = 'val3';
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我不知道为什么.在整个地方使用各种print_r,如果我在循环中打印它,似乎将'key3'=>'val3'插入$ item,但原始数组似乎没有变化.我也试过一个常规的循环,但这也不起作用.
kap*_*apa 22
foreach使用副本$item,所以你不能修改你原来的数组foreach.解决此问题的一种方法是使用&运算符.
foreach($array as &$item) {
if (is_array($item)) {
$item['key3'] = 'val3';
}
}
Run Code Online (Sandbox Code Playgroud)
另一种更优雅的方式是使用array_walk():
array_walk($array, function (&$v, $k) {
if (is_array($v)) {
$v['key3'] = 'val3';
}
});
Run Code Online (Sandbox Code Playgroud)
此示例将从PHP 5.3开始,其中引入了闭包.