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

Posted

技术标签:

【中文标题】php使用foreach将值插入数组数组【英文标题】:php insert value into array of arrays using foreach 【发布时间】:2013-05-05 16:41:38 【问题描述】:

我有一个非常基本的问题,但我被卡住了。我对 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 循环,但也没有用。

【问题讨论】:

每个子数组的键和值是否相等? 很好奇你为什么不干foreach ($array as $item_key => $item) $array[$item_key]['key3'] = 'val3'; 【参考方案1】:

PHP 具有检查变量是否为数组的功能:is_array()。使用这个:

if (is_array($item))  ...

【讨论】:

【参考方案2】:

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。

【讨论】:

$item 只为循环生成。你的意思是&$array['key3'] = 'val3'; @moskito-x 我的意思当然是我写的。这就是重点。查看我链接的foreach 手册页。 更改 $item 是没有用的。将始终被下一个循环覆盖。 但是As foreach relies on the internal array pointer changing it within the loop may lead to unexpected behavior. 因此您必须取消设置参考。 unset($item); // 用最后一个元素打破引用。 structures.foreach 感谢您的出色回答。第一个解决方案工作正常,但第二个解决方案似乎没有工作,很明显我需要在 php 上做得更好一点。我可以把那个 & 符号贴在任何地方吗?哇,那会改变一些事情。另外,感谢您提供有关使用 unset($item) 的提示,但不知道这最终肯定会让我陷入困境!【参考方案3】:

while 循环使用 foreach 使用 key like :

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

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


【讨论】:

虽然不是问题的答案,但这有助于我更好地理解 $key 单词和 $item 之间的关系。

以上是关于php使用foreach将值插入数组数组的主要内容,如果未能解决你的问题,请参考以下文章

php foreach循环中的变量

foreach使用方法

使用foreach数组使用php将多行插入mysql

PHP / MYSQL 插入数组 Foreach 循环

从包含数组的 foreach PHP 插入数据

php 在数组中的特定键后插入值或键/值对。如果key不存在,则将值附加到数组的末尾。