当前位置: 首页 > 后端技术 > PHP

PHP的array_merge详解

时间:2023-03-29 16:49:08 PHP

介绍array_merge这个函数很实用也很常用,但是它有一些特点,稍不注意就会出事。前几天修改同事的代码时出现了这种问题,于是查了一些资料记录下来。定义和语法arrayarray_merge(array$array1[,array$...])合并一个或多个数组。如果输入数组具有相同的字符串键,则该键之后的值将覆盖之前的值。但是,如果数组包含数字键,则后续值不会覆盖原始值,而是会追加。语法很简单,返回值是合并后的数组(并不总是你所期望的)。示例'apple',1=>'banana');$arr2=array(1=>'梨',2=>'橙子');$arr3=array('pitaya'=>'火龙果');print_r(array_merge($arr1,$arr2));//array_merge将重建索引Array([0]=>apple[1]=>banana[2]=>pear[3]=>orange)echo'
';print_r(array_merge($arr1,$arr2,$arr3));//合并索引数组和关联数组Array([0]=>apple[1]=>banana[2]=>pear[3]=>orange[pitaya]=>dragonfruit)echo'
';//索引数组不会被覆盖,但是如果使用+,之前的值会覆盖后面相同索引的值print_r($arr1+$arr2);//Array([0]=>apple[1]=>banana[2]=>orange)echo'
';//关联数组$arr1=array('apple'=>'apple','banana'=>'banana');$arr2=array('apple'=>'黄元帅苹果','orange'=>'橙色');print_r(array_merge($arr1,$arr2));//Array([apple]=>元帅黄苹果[banana]=>Banana[orange]=>Orange)echo'
';//下面的值会覆盖同一个key的前一个值,而使用+正好相反,前一个值会覆盖后一个值print_r($arr1+$arr2);//Array([apple]=>apple[banana]=>Banana[orange]=>orange)填坑那么array_merge中所谓的坑是什么?在实际使用中,使用框架从数据库中查询数据,返回的是二维数组或一维数组,但如果查询不到数据,则返回null。如果此时使用array_merge,就会出现错误。如下$value){$newArray=array_merge($newArray,$value);}}return$newArray;}$arr1=array('test'=>array('apple','pear'),'test1'=>array('apple','pear'));$arr2=false;$arr3=null;print_r((array)$arr2);//数组([0]=>)echo'
';print_r((array)$arr3);//数组()echo'
';print_r(array_merge_perfect($arr1,$arr2));//数组([test]=>Array([0]=>apple[1]=>pear)[test1]=>Array([0]=>apple[1]=>pear))echo'
';print_r(array_merge_perfect($arr1,$arr3));//数组([test]=>;Array([0]=>apple[1]=>pear)[test1]=>Array([0]=>apple[1]=>pear))echo'
';print_r(array_merge_perfect($arr2,$arr3));//数组()echo'
';参考资料:array_merge、数组转换、可变参数