PHP数组合并+和array_merge()有什么区别?

答案

  1. | | + | array_merge() |
  2. |---------------+--------------+--------------------|
  3. | 数字索引 | 取前弃后 | 附加到后面 |
  4. |---------------+--------------+--------------------|
  5. | 字符串索引 | 取前弃后 | 后覆盖前 |
  6. |---------------+--------------+--------------------|

答案解析

array_merge()

  • 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值

  • 如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面

+

  • 如果输入的数组中有相同的字符串键名,把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉。

  • 然而,如果数组包含数字键名+运算会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)。

测试代码:

  1. $array1['foo'] = 'Bar1';
  2. $array2['foo'] = 'Bar2';
  3. print_r($array1 + $array2); // Array ( [foo] => Bar1 )
  4. print_r($array2 + $array1); // Array ( [foo] => Bar2 )
  5. print_r(array_merge($array1, $array2)); // Array ( [foo] => Bar2 )
  6. print_r(array_merge($array2, $array1)); // Array ( [foo] => Bar1 )
  7. $array1 = [1, 2, 3];
  8. $array2 = [4, 5, 6];
  9. print_r($array1 + $array2); // Array ( [0] => 1 [1] => 2 [2] => 3 )
  10. print_r($array2 + $array1); // Array ( [0] => 4 [1] => 5 [2] => 6 )
  11. print_r(array_merge($array1, $array2)); // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
  12. print_r(array_merge($array2, $array1)); // Array ( [0] => 4 [1] => 5 [2] => 6 [3] => 1 [4] => 2 [5] => 3 )