【问题标题】:Array of associative arrays, add new elements to the associative arrays关联数组的数组,将新元素添加到关联数组
【发布时间】:2012-10-24 08:23:45
【问题描述】:

如果我有这样的数组:

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;

标签: php arrays associative-array


【解决方案1】:
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

http://php.net/foreach比较

【讨论】:

    【解决方案2】:
    foreach($exterior_array as $k=>$inside_array) {
     $exterior_array[$k]['newkey'] = "hihihi";
    }
    

    试试这个

    【讨论】:

    • 您必须为 $exterior_array 而不是 $inside_array 设置值 :)
    【解决方案3】:
    foreach($exterior_array as $key => $inside_array) {
            $inside_array[$key]['newkey'] = "hihihi";
        }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        因为你是用它作为临时数组,所以这样做:

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

        或者您可以使用 jpo 建议的引用来执行此操作,这将创建一个新数组,但保持与原始数组的链接(注意 &):

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

        【讨论】:

          【解决方案6】:

          试试这个。经过测试和验证。

          <?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
                      )
              )
          ?>
          

          【讨论】:

            【解决方案7】:

            它不适合这个主题,但我在自己的项目中经常使用它。

            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');
            

            【讨论】:

              【解决方案8】:
              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)
              

              o/p=>数组([1] => 1 [a] => a [b] => b)

              【讨论】:

                猜你喜欢
                • 2012-01-23
                • 1970-01-01
                • 1970-01-01
                • 2015-10-30
                • 1970-01-01
                • 2017-04-04
                • 2021-11-27
                • 2011-10-23
                • 1970-01-01
                相关资源
                最近更新 更多