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

php使用foreach将值插入数组的数组中,php,arrays,loops,foreach,associative-array,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','key

我有一个很基本的问题,但我被卡住了。我对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,如果我在循环中打印$item,它似乎会在$item中插入'key3'=>'val3',但原始数组似乎没有改变。我还尝试了一个常规的for循环,但也没有成功。

PHP有一个函数来检查变量是否是数组:
是数组()
。使用以下命令:

if (is_array($item)) { ...
使用
$item
的副本,因此无法在
foreach
中修改原始数组。解决此问题的一种方法是使用
&
运算符

foreach($array as &$item) {
    if (is_array($item)) {
        $item['key3'] = 'val3';
    }
}
另一种更优雅的方式是使用:


此示例将在PHP 5.3中使用,其中引入了闭包。

同时使用foreach use键进行循环,如:

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

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

}

每个子数组的键及其值是否相等?奇怪的是,为什么不直接执行
foreach($item\u key=>$item的数组){$array[$item\u key]['key3']='val3';}
$item只为循环生成。你的意思是
&$array['key3']='val3'@moskito-x我当然是指我写的东西。这就是重点。检查我链接的
foreach
手册页面。更改$item是无用的。将始终被下一个循环覆盖。但由于foreach依赖于内部数组指针,因此在循环中更改它可能会导致意外行为。
因此必须取消设置引用<代码>未设置($item)//用最后一个元素断开引用。谢谢你的回答。第一个解决方案运行良好,但第二个解决方案似乎不起作用,很明显,我需要在php方面做得更好一些。我可以把那个符号贴在任何地方吗?哇,这会改变一切。另外,谢谢你给我的关于使用unset($item)的提示,我不知道这最终会让我陷入困境!虽然不是问题的答案,但这有助于我更好地理解
$key
单词和
$item
之间的关系。
foreach($array as $key => $item){

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

}