php中array_merge函数的详细用法(附实例)
来源:不言
发布时间:2019-01-16 15:19:13
阅读量:758
本篇文章给大家带来的内容是关于php中array_merge函数的详细用法(附实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
array_merge 这个函数很实用,也很常用,但是它有一些特性,不注意的话就会造成麻烦。前几天修改同事代码的时候,就出现了这种问题,所以查些资料写下来。
定义与语法
array array_merge ( array $array1 [, array $... ] )
合并一个或多个数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
语法很简单,返回值是合并后的数组(并不总是你所期望的返回值)。
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php
$arr1 = array (0 => 'apple' , 1 => 'banana' );
$arr2 = array (1 => 'pear' , 2 => 'orange' );
$arr3 = array ( 'pitaya' => '火龙果' );
print_r( array_merge ( $arr1 , $arr2 ));
echo '<br />' ;
print_r( array_merge ( $arr1 , $arr2 , $arr3 ));
echo '<br />' ;
print_r( $arr1 + $arr2 );
echo '<br />' ;
$arr1 = array ( 'apple' => '苹果' , 'banana' => '香蕉' );
$arr2 = array ( 'apple' => '黄元帅苹果' , 'orange' => '橙子' );
print_r( array_merge ( $arr1 , $arr2 ));
echo '<br />' ;
print_r( $arr1 + $arr2 );
|
填坑
那么 array_merge 所谓的坑是什么呢?
实际使用中,使用框架从数据库中查询数据,返回的是二维数组或者一维数组。但是如果查询不到数据,返回的是 null ,这个时候使用 array_merge 的话,就会产生错误了。如下
1 2 3 4 5 6 7 8 9 | <?php
$arr1 = array ( 'apple' , 'pear' );
$arr2 = null;
$arr3 = array_merge ( $arr1 , $arr2 );
var_dump( $arr3 );
|
会产生一条 Warning,并且 array_merge 的返回值会是 null。
处理方法不难,只要将参数转换为数组即可,可以封装函数进行处理。要注意的是参数为 false 怎么处理。如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?php
function array_merge_perfect(... $args )
{
$fun = function ( $value ) {
if ( $value === false) {
return array ();
}
return ( array ) $value ;
};
$arr = array_map ( $fun , $args );
$newArray = array ();
foreach ( $arr as $key => $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 );
echo '<br />' ;
print_r(( array ) $arr3 );
echo '<br />' ;
print_r(array_merge_perfect( $arr1 , $arr2 ));
echo '<br />' ;
print_r(array_merge_perfect( $arr1 , $arr3 ));
echo '<br />' ;
print_r(array_merge_perfect( $arr2 , $arr3 ));
echo '<br />' ;
|