PHP合并数组+号和array_merge的区别


PHP的数组融合一般有两种做法,一种是直接使用加号相加,另一种则是使用array_merge函数进行相加,两者之间有点区别:

1.相加会证数组中的自然index不被重置
2.相加方法中,被加的数组内的值不会被覆盖
3.merge函数中的自然index会被重置
4.merge函数,无所谓被merge和merge关系,越后面的array参数,其值,会覆盖较前面的array参数相同键的值

例子:

数组1:

$arr1 = array(
  10 => valueof10,
  11 => valueof11,
  key1 => dataofkey1,
  key2 => dataofkey2,
  array => array(
    key1 => 1,
    key2 => abc,
    key3 => array(
      1, 2, name => peter
    ),
  ),
);

数组2:

$arr2 = array(
  10 => newvalueof10,
  11 => newvalueof11,
  key1 => newdataofkey1,
  key3 => newdataofkey3,
  array => array(
    key1 => 2,
    key2 => defg,
    key3 => array(
      1, 2, name => jonathan, gender => male
    ),
  ),
);

结果比较:

array (size=6)
 10 => string valueof10 (length=9)
 11 => string valueof11 (length=9)
 key1 => string dataofkey1 (length=10)
 key2 => string dataofkey2 (length=10)
 array => 
  array (size=3)
   key1 => int 1
   key2 => string abc (length=3)
   key3 => 
    array (size=3)
     0 => int 1
     1 => int 2
     name => string peter (length=5)
 key3 => string newdataofkey3 (length=13)
 
array (size=8)
 0 => string valueof10 (length=9)
 1 => string valueof11 (length=9)
 key1 => string newdataofkey1 (length=13)
 key2 => string dataofkey2 (length=10)
 array => 
  array (size=3)
   key1 => int 2
   key2 => string defg (length=4)
   key3 => 
    array (size=4)
     0 => int 1
     1 => int 2
     name => string jonathan (length=8)
     gender => string male (length=4)
 2 => string newvalueof10 (length=12)
 3 => string newvalueof11 (length=12)
 key3 => string newdataofkey3 (length=13)