php使用foreach将值插入数组的数组中
我有一个很基本的问题,但我被卡住了。我对php非常陌生,我有这样一个数组: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
$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";
}