[笔记]php中数组的合并

合并2个或多个数组是可以使用下面3个方式:

1. 使用数组运算符 $a + $b ( 具体的应该说成 $a 和 $b 的联合 )

+ 运算符把右边的数组附加到左边的数组后面,但是重复的键值(不区分数值索引和字符串键值)不会被覆盖。

<?php
$a = array(1,2,3,'a'=>'apple');
$b = array(1,7,8,9,'a'=>'barana',10);
$c = $a + $b; // Union of $a and $b
echo "Union of $a and $b: \n";
print_r($c);
//output Union of $a and $b:
// Array ( [0] => 1 [1] => 2 ['a']=>apple [2] => 3 [3] => 9 [4] => 10 )
?>

2. 使用 array_merge 合并一个或多个数组

array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

<?php
$ar1 = array('a', 'b');
$ar2 = array('c', 'd');
$ar3 = ($ar1 + $ar2);
print_r($ar3);
//Result:
//Array
//(
//   [0] => a
//    [1] => b
//)

//Where as:
$ar1 = array('a', 'b');
$ar2 = array('c', 'd');
$ar3 = array_merge($ar1, $ar2);
print_r($ar3);
//Result:
//Array
//(
//    [0] => a
//    [1] => b
//    [2] => c
//    [3] => d
//)
?>

3. 使用array_merge_recursive 递归地合并一个或多个数组

array_merge_recursive() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去(如果其中一方为非数组将会转换被成数组类型),因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。

<?php
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
?>

result:

Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )

            [0] => blue
        )

    [0] => 5
    [1] => 10
)
<?php
$ar1 = array("color" =>  "red", 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
var_dump($result);
?>

result:

array(3) {
  ["color"]=>
  array(3) {
    [0]=>
    string(3) "red"
    ["favorite"]=>
    string(5) "green"
    [1]=>
    string(4) "blue"
  }
  [0]=>
  int(5)
  [1]=>
  int(10)
}