记PHP中 数组相加 和 array_merge 的区别。

无意中看到一道面试题:

似曾相识,但是不会做(惭愧!)

于是立马搜索了一下,下面举个例子: 

    $a = [

      'y' => 'yy',

      1,

      2,

      3,

      'a' => 'aa',

      'b' => 'bb'

    ];            

    $b = [

      20,

      2,

      3,

      4,

      5,

      'a'=> 'aaa',

      'c' =>'ccc',

      6

     ];     

        

    $c = $a + $b;

    $d = array_merge($a,$b);

 

 

 ( var_dump($a)   ====>    array(6) { ["y"]=> string(2) "vv" [0]=> int(1) [1]=> int(2) [2]=> int(3) ["a"]=> string(2) "aa" ["b"]=> string(2) "bb" }    )

 ( var_dump($b)   ====>    array(8) { [0]=> int(20) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) ["a"]=> string(3) "aaa" ["c"]=> string(3) "ccc" [5]=> int(6) }     )

 

 

    一、对于数组相加来说比较简单,无论是数组键还是字符键键相同的时候:首先出现的键保留值,后面出现的丢弃,并且数字键会重新排序。

  于是var_dump($c);

array(10) {
  ["y"]=>
  string(2) "vv"
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  ["a"]=>
  string(2) "aa"
  ["b"]=>
  string(2) "bb"
  [3]=>
  int(4)
  [4]=>
  int(5)
  ["c"]=>
  string(3) "ccc"
  [5]=>
  int(6)
}

果然,由于$a中 1,2,3与$b中的20,2,3含有相同的数字键,于是$b中的被覆盖。同理字符键aa,也被覆盖。其他没事。最后结果数字键重新排序,完事。

二、对于array_merge也不难记,就是对于数字键来说,相同时候,不发生覆盖,最后数字键会重新排序。但是如果字符键相同时,后出现的覆盖先出现的(与数组相加相反)。
于是var_dump($d);
array(13) {
  ["y"]=>
  string(2) "vv"
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  ["a"]=>
  string(4) "aaa"
  ["b"]=>
  string(2) "bb"
  [3]=>
  int(20)
  [4]=>
  int(2)
  [5]=>
  int(3)
  [6]=>
  int(4)
  [7]=>
  int(5)
  ["c"]=>
  string(3) "ccc"
  [8]=>
  int(6)
}
数字键相同的不管。这里就一个字符键相同,取后面那个,数字键重新排序,好了。

 于是上面题目选 D

 

转载于:https://www.cnblogs.com/hhp4748/p/11430608.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值