[面试题] 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.
本帖由系统于 6年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

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

6年前 评论

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

6年前 评论

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

6年前 评论
一冉再

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

5年前 评论

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