[面试题] array_merge 和 array+ 的区别

首先来看看键名是string,两者区别:

<?php
$arr1 = array('a'=>'PHP');
$arr2 = array('a'=>'PYTHON');
print_r(array_merge($arr1,$arr2)); //Array ( [a] => PYTHON ) 如果键名为字符,且键名相同,array_merge()后面数组元素值会覆盖前面数组元素值
print_r($arr1+$arr2); //Array ( [a] => PHP )如果键名为字符,且键名相同,数组相加会将最先出现的值作为结果

//再比如
$arr1 = array('a'=>'1','b'=>'2');
$arr2 = array('a'=>'1','b'=>'3','c'=>'2');
$ret = array_merge($arr1,$arr2);
print_r($ret);//Array ( [a] => 1 [b] => 3 [c] => 2 )
$ret = $arr1+$arr2;
print_r($ret);//Array ( [a] => 1 [b] => 2 [c] => 2 )

如果键名是数字,两者区别:

<?php
$arr1 = array("JAVA","PHP");
$arr2 = array("PYTHON","PHP");
print_r(array_merge($arr1,$arr2));//Array ( [0] => JAVA [1] => PHP [2] => PYTHON [3] => PHP ) 如果键名为数字,array_merge()不会进行覆盖
print_r($arr1+$arr2);//Array ( [0] => JAVA [1] => PHP )如果键名为数字,数组相加会将最先出现的值作为结果,后面键名相同的会被抛弃

//再比如

$arr1 = array(1=>'1',2=>'2');
$arr2 = array(1=>'1',2=>'3',8=>'2');

$ret = array_merge($arr1,$arr2);
print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 3 [4] => 2 ) 如果数组中的键名为数字时,会格式化键名并保留所有键值。

//再比如
$arr1 = array(1,2);
$arr2 = array(1,2,8);

$ret = array_merge($arr1,$arr2);
print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 8 )
?>

特别要注意

如何最有效的获取字符键名相同值不同的两个数组值集合呢

$arr1 = array("a"=>"PHP","C"); $arr2 = array("a"=>"JAVA","C","PYTHON"); print_r(array_merge_recursive($arr1, $arr2)); //Array ( [a] => Array ( [0] => PHP [1] => JAVA ) [0] => C [1] => C [2] => PYTHON )
  • 总结
    array+ : 无论健名是 字符串或数字 ,相同健名的则会取首先出现的值作为最终值。
    array_merge:

1.健名为字符串,相同健名取最后出现的值作为值。
2.键名为数字,格式化键名,并保留所有值。

本作品采用《CC 协议》,转载必须注明作者和本文链接
不要轻易放弃。学习成长的路上,我们长路漫漫,只因学无止境 Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.
本帖由系统于 5年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

这个点我总是记不住 因为用的少。但是奇怪的是,既然用的少,为什么总是面试要问?

5年前 评论

曾经遇到个面试 说:大概列举一下不常用的git命令

5年前 评论

@萧潇 位运算你用过吗,还有人问呢,用不用是一回事,知不知道是一回事

5年前 评论

@zhouys 这么说 好像有点道理啊

5年前 评论
一冉再

[源码分析系列] 不要在循环体中使用 array_merge ()
我之前的文章中进行了详细分析呢

5年前 评论

@SeanDZ 怼他,你说不常用还要我说不会自己百度吗

5年前 评论

@SeanDZ 你说最不常用的就是:git push

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!