How to merge array and preserve keys?

后端 未结 5 667
长情又很酷
长情又很酷 2020-12-10 00:27

I have two arrays:

$array1 = array(\'a\' => 1, \'b\' => 2, \'c\' => 3);
$array2 = array(\'d\' => 4, \'e\' => 5, \'f\' => 6, \'a\' => \'n         


        
相关标签:
5条回答
  • 2020-12-10 01:14

    You're looking for array_replace():

    $array1 = array('a' => 1, 'b' => 2, 'c' => 3);
    $array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
    print_r(array_replace($array1, $array2));
    

    Available since PHP 5.3.

    Update

    You can also use the union array operator; it works for older versions and might actually be faster too:

    print_r($array2 + $array1);
    
    0 讨论(0)
  • 2020-12-10 01:14

    @Jack uncovered the native function that would do this but since it is only available in php 5.3 and above this should work to emulate this functionality on pre 5.3 installs

      if(!function_exists("array_replace")){
          function array_replace(){
             $args = func_get_args();
             $ret = array_shift($args);
             foreach($args as $arg){
                 foreach($arg as $k=>$v){
                    $ret[(string)$k] = $v;
                 }
             }
             return $ret;
         }
     }
    
    0 讨论(0)
  • 2020-12-10 01:14

    I think this might help if i understand properly:

    foreach ($i = 0, $num = count($array2); $i < $num; $i++)
    {
      $array = array_merge($array1, $arrar2[$i]);
    }
    
    0 讨论(0)
  • 2020-12-10 01:20

    Let suppose we have 3 arrays as below.

    $a = array(0=>['label'=>'Monday','is_open'=>1],1=>['label'=>'Tuesday','is_open'=>0]);
    
    $b = array(0=>['open_time'=>'10:00'],1=>['open_time'=>'12:00']); 
    
    $c = array(0=>['close_time'=>'18:00'],1=>['close_time'=>'22:00']); 
    

    Now, if you want to merge all these array and want a final array that have all array's data under key 0 in 0 and 1 in 1 key as so on.

    Then you need to use array_replace_recursive PHP function, as below.

    $final_arr = array_replace_recursive($a, $b , $c); 
    

    The result of this will be as below.

    Array
    (
        [0] => Array
            (
                [label] => Monday
                [is_open] => 1
                [open_time] => 10:00
                [close_time] => 18:00
            )
    
        [1] => Array
            (
                [label] => Tuesday
                [is_open] => 0
                [open_time] => 12:00
                [close_time] => 22:00
            )
    
    )
    

    Hope the solution above, will best fit your requirement!!

    0 讨论(0)
  • 2020-12-10 01:23

    array_replace_recursive() or array_replace() is the function you are looking for

    $array1 = array('a' => 1, 'b' => 2, 'c' => 3);
    $array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
    
    
    var_dump(array_replace_recursive($array1, $array2));
    

    Demo

    0 讨论(0)
提交回复
热议问题