Combine two arrays

前端 未结 9 545
名媛妹妹
名媛妹妹 2020-11-22 15:47

I have two arrays like this:

array( 
\'11\' => \'11\',
\'22\' => \'22\',
\'33\' => \'33\',
\'44\' => \'44\'
);

array( 
\'44\' => \'44\',
\'55         


        
相关标签:
9条回答
  • 2020-11-22 15:54

    Just use:

    $output = array_merge($array1, $array2);
    

    That should solve it. Because you use string keys if one key occurs more than one time (like '44' in your example) one key will overwrite proceding ones with the same name. Because in your case they both have the same value anyway it doesn't matter and it will also remove duplicates.

    Update: I just realised, that PHP treats the numeric string-keys as numbers (integers) and so will behave like this, what means, that it renumbers the keys too...

    A workaround is to recreate the keys.

    $output = array_combine($output, $output);
    

    Update 2: I always forget, that there is also an operator (in bold, because this is really what you are looking for! :D)

    $output = $array1 + $array2;
    

    All of this can be seen in: http://php.net/manual/en/function.array-merge.php

    0 讨论(0)
  • 2020-11-22 15:57

    To do this, you can loop through one and append to the other:

    <?php
    
    $test1 = array( 
    '11' => '11',
    '22' => '22',
    '33' => '33',
    '44' => '44'
    );
    
    $test2 = array( 
    '44' => '44',
    '55' => '55',
    '66' => '66',
    '77' => '77'
    );
    
    
    function combineWithKeys($array1, $array2)
    {
        foreach($array1 as $key=>$value) $array2[$key] = $value;
        asort($array2);
        return $array2;
    } 
    
    print_r(combineWithKeys($test1, $test2));
    
    ?>
    

    UPDATE: KingCrunch came up with the best solution: print_r($array1+$array2);

    0 讨论(0)
  • 2020-11-22 15:57

    If you are using PHP 7.4 or above, you can use the spread operator ... as the following examples from the PHP Docs:

    $arr1 = [1, 2, 3];
    $arr2 = [...$arr1]; //[1, 2, 3]
    $arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
    $arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
    $arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
    
    function getArr() {
      return ['a', 'b'];
    }
    $arr6 = [...getArr(), 'c']; //['a', 'b', 'c']
    
    $arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']
    
    function arrGen() {
        for($i = 11; $i < 15; $i++) {
            yield $i;
        }
    }
    $arr8 = [...arrGen()]; //[11, 12, 13, 14]
    

    It works like in JavaScript ES6.

    See more on https://wiki.php.net/rfc/spread_operator_for_array.

    0 讨论(0)
  • 2020-11-22 16:00

    Warning! $array1 + $array2 overwrites keys, so my solution (for multidimensional arrays) is to use array_unique()

    array_unique(array_merge($a, $b), SORT_REGULAR);
    

    Notice:

    5.2.10+ Changed the default value of sort_flags back to SORT_STRING.

    5.2.9 Default is SORT_REGULAR.

    5.2.8- Default is SORT_STRING

    It perfectly works. Hope it helps same.

    0 讨论(0)
  • 2020-11-22 16:02

    This works:

    $output = $array1 + $array2;
    
    0 讨论(0)
  • 2020-11-22 16:02

    This works:

    $a = array(1 => 1, 2 => 2, 3 => 3);
    $b = array(4 => 4, 5 => 5, 6 => 6);
    $c = $a + $b;
    print_r($c);
    
    0 讨论(0)
提交回复
热议问题