15

我有一个非常基本的问题,但我被卡住了。我对php很陌生,我有一个这样的数组:

$array = array(
    'one' => 1,
    'two' => array('key1' => 'val1','key2' => 'val2'),
    'three' => array('key1' => 'val1','key2' => 'val2'),
    'four' => array('key1' => 'val1','key2' => 'val2')
);

对于数组中的每个数组(即“二”、“三”和“四”),我想将“key3”=>“val3”插入这些数组中。

我试过这个:

foreach($array as $item) {
    if (gettype($item) == "array") {
        $item['key3'] = 'val3';
    }
}

但它不起作用,我不知道为什么。在各处使用各种 print_r,如果我在循环中将其打印出来,它似乎会将 'key3' => 'val3' 插入到 $item 中,但原始数组似乎没有改变。我也尝试了一个常规的 for 循环,但这也没有用。

4

3 回答 3

24

foreach适用于 的副本$item,因此您无法修改foreach. 解决此问题的一种方法是使用&运算符。

foreach($array as &$item) {
    if (is_array($item)) {
        $item['key3'] = 'val3';
    }
}

另一种更优雅的方法是使用array_walk()

array_walk($array, function (&$v, $k) { 
    if (is_array($v)) {
        $v['key3'] = 'val3';
    }
});

这个例子将从 PHP 5.3 开始工作,其中引入了闭包。

于 2013-05-10T22:34:34.173 回答
0

PHP 有一个函数来检查一个变量是否是一个数组:is_array(). 用这个:

if (is_array($item)) { ...
于 2013-05-10T22:33:59.657 回答
0

while 循环使用 foreach 使用键,例如:

foreach($array as $key => $item){

    $array[$key]['newElement'] = "newValue";

}
于 2016-01-28T11:10:32.270 回答