我有一个非常基本的问题,但我被困住了。我是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循环,但这也不起作用。
答案 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>