php使用foreach将值插入到数组数组中

时间:2013-05-10 22:31:47

标签: php arrays loops foreach 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')
);

并且对于数组中的每个数组(即'two,'three'和'four'),我想插入'key3'=> 'val3'进入那些阵列。

我试过了:

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

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

3 个答案:

答案 0 :(得分:22)

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,其中引入了闭包。

答案 1 :(得分:0)

PHP具有检查变量是否为数组的函数:is_array()。使用此:

if (is_array($item)) { ...

答案 2 :(得分:0)

使用foreach循环时使用键:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="some">
   <img id="1" class="pointer odd unactive" />
   <img id="2" class="pointer even active" />
</div>
<div class="some">
   <img id="3" class="pointer odd unactive" />
   <img id="4" class="pointer even active" />
</div>
<div class="some">
   <img id="5" class="pointer odd unactive" />
   <img id="6" class="pointer even active" />
</div>