记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中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 )
?>
特别要注意。关于“array_merge和数组相加的区别”上面已经阐述的很清楚了,回到我最初的问题“如何最有效的获取字符键名相同值不同的两个数组值集合呢”,不会这要对每个数组遍历吧,PHP中还有一个函数:array_merge_recursive
— 递归地合并一个或多个数组,如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去。如下例:
<?php $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 ) ?>
原文地址:https://www.cnblogs.com/phpper/p/9144125.html
时间: 2024-10-15 06:29:47