关联数组的数组,向关联数组中添加新元素

4
如果我有这样一个数组:
array(2) {
  [0]=>
  array(2) {
    ["id"]=>
    string(2) "34"
    ["total"]=>
    string(6) "122337"
  },
[1]=>
  array(2) {
    ["id"]=>
    string(2) "43"
    ["total"]=>
    string(6) "232337"
  }
}

我希望为每个子数组添加一个新的键值对,例如,最终结果应该像这样:

array(2) {
      [0]=>
      array(2) {
        ["id"]=>
        string(2) "34"
        ["total"]=>
        string(6) "122337"
        ["newkey"]=>
        string(6) "hihihi"
      },
    [1]=>
      array(2) {
        ["id"]=>
        string(2) "43"
        ["total"]=>
        string(6) "232337"
       ["newkey"]=>
        string(6) "hihihi"
      }
    }

我该怎么做呢?

我尝试用foreach来实现,像这样:

foreach($exterior_array as $inside_array) {
 $inside_array['newkey'] = "hihihi";
}

但是一旦我进入foreach循环,这些值就没有被保存。


你应该先创建一个空值元素,例如 array[1] = '';,然后再赋值 array[1]=2; - Ionut Flavius Pogacian
8个回答

6
foreach($exterior_array as $inside_array) {
    $inside_array['newkey'] = "hihihi";
}

但是一旦进入foreach循环,值就不会保存。这是因为您通过$inside_array在数组的副本上进行操作。您可以通过使用引用将$inside_array作为原始值的别名来访问要更改的“原始”值。
foreach($exterior_array as &$inside_array) {
                           ^- set the reference
    $inside_array['newkey'] = "hihihi";
}
unset($inside_array);
^^^^^^^^^^^^^^^^^^^^^- remove the reference

Compare with http://php.net/foreach


0
foreach($exterior_array as $k=>$inside_array) {
 $exterior_array[$k]['newkey'] = "hihihi";
}

试试这个


你必须为$exterior_array设置值,而不是$inside_array :) - Svetoslav

0

因为您将其用作临时数组,所以请这样做:

foreach($exterior_array as $key => $inside_array)
{
    $exterior_array[$key]['newkey'] = "hihihi";
}

或者你可以像jpo建议的那样使用引用来完成,这将创建一个新的数组,但保持与原始数组的链接(注意&):

foreach($exterior_array as &$inside_array)
{ 
    $inside_array['newkey'] = "hihihi";
} 

0
foreach($exterior_array as $key => $inside_array) {
        $inside_array[$key]['newkey'] = "hihihi";
    }

0

使用引用的另一种解决方案:

foreach($exterior_array as &$inside_array) { 
    $inside_array['newkey'] = "hihihi";
} 

0

试试这个。已经测试过并验证。

<?php
    $parentArray = array(
        array("id"=>1),
        array("id"=>2),
        array("id"=>3),
    );

    foreach($parentArray as $key=>$childArray)
    {
        $parentArray[$key]['newkey'] = "hello";
    }

    //output

    Array
    (
        [0] => Array
            (
                [id] => 1
                [newkey] => hello
            )
        [1] => Array
            (
                [id] => 2
                [newkey] => hello
            )
        [2] => Array
            (
                [id] => 3
                [newkey] => hello
            )
    )
?>

0

虽然这不是完美的适用于这个主题,但我在自己的项目中经常使用它。

http://pastebin.com/TyWzLWuK

它的性能不是很高,但易于处理。

例如:

Fw_Recursive_Array_Helper::set($array, '0.someKey.someSubKey', 'value');
if(Fw_Recursive_Array_Helper::has($array, '0.someKey.someSubKey')) {
   echo Fw_Recursive_Array_Helper::get($array, '0.someKey.someSubKey'); 
}
echo Fw_Recursive_Array_Helper::get($array, '1.someKey.someSubKey', 'If the key does not exist, use this');

0
class helper
{

public function arrayInsert($key=NULL,$value=NULL,& $array=array())
{

if(!empty($key)&&!empty($value)&&is_array($array))
{
 $array[$key]=$value;
}
}
}

$obj=new helper();


$array=array('1'=>1,'a'=>'a');
$obj->arrayInsert('b','b',$array);
print_r($array)

输出=>数组([1] => 1 [a] => a [b] => b)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接