代码之家  ›  专栏  ›  技术社区  ›  alex

无法在PHP中连接2个数组

  •  49
  • alex  · 技术社区  · 15 年前

    我最近学习了如何使用PHP中的+操作符连接2个数组。

    但是考虑一下这个代码…

    $array = array('Item 1');
    
    $array += array('Item 2');
    
    var_dump($array);
    

    输出是

    数组(1)[0]=>字符串(6)”项 1“}

    为什么这不起作用?跳过速记并使用 $array = $array + array('Item 2') 也不工作。这跟钥匙有关系吗?

    10 回复  |  直到 7 年前
        1
  •  104
  •   awgy    15 年前

    两者都有一把钥匙 0 ,组合数组的方法将折叠重复项。试用使用 array_merge() 相反。

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

    如果数组中的元素使用不同的键, + 接线员会更合适。

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

    编辑:添加代码段以澄清

        2
  •  8
  •   Christopher Altman    15 年前

    使用 array_merge()
    请参阅以下文档:
    http://php.net/manual/en/function.array-merge.php

    将一个或多个数组的元素合并在一起,以便将一个数组的值附加到前一个数组的末尾。它返回结果数组。

        3
  •  6
  •   deceze    15 年前

    + 称为联合运算符,它不同于串联运算符(PHP没有用于数组的运算符)。这个 description 清楚地说:

    +运算符将剩余键的元素从右手数组附加到左手数组,而复制的键不会被覆盖。

    举例来说:

    $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"
    }
    

    因为两个数组都有一个带有键的条目 0 ,结果是预期的。

    要连接,请使用 array_merge .

        4
  •  6
  •   Nir Alfasi    8 年前

    以前的答案都不正确! 合并 实际上合并数组,也就是说,如果数组有一个公共项,那么将省略其中一个副本。同样的道理 联盟 .

    我没有找到解决这个问题的“解决方法”,但实际上是手动的……

    这就是:

    <?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);
    ?>
    
        5
  •  3
  •   Rabbott    15 年前

    尝试数组合并。

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

    我认为这是因为你没有给它们分配一个键,所以它们都有0的键,而且+没有重新索引,所以它试图重写它。

        6
  •  2
  •   Brant Messenger    15 年前
    $array = array('Item 1');
    
    array_push($array,'Item 2');
    

    $array[] = 'Item 2';
    
        7
  •  2
  •   NullUserException Mark Roddy    13 年前

    这确实是一个关键冲突。连接数组时,不会覆盖重复的键。

    相反,你必须使用 array_merge()

    $array = array_merge(array('Item 1'), array('Item 2'));
    
        8
  •  0
  •   Henry    7 年前

    这适用于非关联数组:

    while(($item = array_shift($array2)) !== null && array_push($array1, $item));

        9
  •  -3
  •   Josh K    15 年前

    试着说

    $array[] = array('Item 2'); 
    

    尽管看起来您正在尝试将数组添加到数组中,因此 $array[][] 但这不是你的头衔所暗示的。

        10
  •  -5
  •   randomWalk    10 年前

    你可以用接线员。 $array3=$array1.$array2;