Can't concatenate 2 arrays in PHP

后端 未结 10 1062
终归单人心
终归单人心 2020-11-28 12:49

I\'ve recently learned how to join 2 arrays using the + operator in PHP.

But consider this code...

$array = array(\'Item 1\');

$array += array(\'Ite         


        
相关标签:
10条回答
  • 2020-11-28 12:51

    IMO some of the previous answers are incorrect! (It's possible to sort the answers to start from oldest to newest).

    array_merge() actually merges the arrays, meaning, if the arrays have a common item one of the copies will be omitted. Same goes for + (union).

    I didn't find a "work-around" for this issue, but to do it manually...

    Here it goes:

    <?php
    $part1 = array(1,2,3);
    echo "array 1 = \n";
    print_r($part1);
    $part2 = array(4,5,6);
    echo "array 2 = \n";
    print_r($part2);
    $ans = NULL;
    for ($i = 0; $i < count($part1); $i++) {
        $ans[] = $part1[$i];
    }
    for ($i = 0; $i < count($part2); $i++) {
        $ans[] = $part2[$i];
    }
    echo "after arrays concatenation:\n";
    print_r($ans);
    ?>
    
    0 讨论(0)
  • 2020-11-28 12:54

    Both will have a key of 0, and that method of combining the arrays will collapse duplicates. Try using array_merge() instead.

    $arr1 = array('foo'); // Same as array(0 => 'foo')
    $arr2 = array('bar'); // Same as array(0 => 'bar')
    
    // Will contain array('foo', 'bar');
    $combined = array_merge($arr1, $arr2);
    

    If the elements in your array used different keys, the + operator would be more appropriate.

    $arr1 = array('one' => 'foo');
    $arr2 = array('two' => 'bar');
    
    // Will contain array('one' => 'foo', 'two' => 'bar');
    $combined = $arr1 + $arr2;
    

    Edit: Added a code snippet to clarify

    0 讨论(0)
  • 2020-11-28 12:57

    you may use operator . $array3 = $array1.$array2;

    0 讨论(0)
  • 2020-11-28 12:59
    $array = array('Item 1');
    
    array_push($array,'Item 2');
    

    or

    $array[] = 'Item 2';
    
    0 讨论(0)
  • 2020-11-28 13:03

    + is called the Union operator, which differs from a Concatenation operator (PHP doesn't have one for arrays). The description clearly says:

    The + operator appends elements of remaining keys from the right handed array to the left handed, whereas duplicated keys are NOT overwritten.

    With the example:

    $a = array("a" => "apple", "b" => "banana");
    $b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
    $c = $a + $b;
    
    array(3) {
      ["a"]=>
      string(5) "apple"
      ["b"]=>
      string(6) "banana"
      ["c"]=>
      string(6) "cherry"
    }
    

    Since both your arrays have one entry with the key 0, the result is expected.

    To concatenate, use array_merge.

    0 讨论(0)
  • 2020-11-28 13:04

    Try array_merge.

    $array1 = array('Item 1');
    
    $array2 = array('Item 2');
    
    $array3 = array_merge($array1, $array2);
    

    I think its because you are not assigning a key to either, so they both have key of 0, and the + does not re-index, so its trying to over write it.

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