首页 > php数组 > PHP数组合并函数+、array_merge、array_merge_recursive

PHP数组合并函数+、array_merge、array_merge_recursive

我在php学习在使用到最多的数据合并方法就是array_merge、array_merge_recursive函数了,当然还会少用到操作符(+)函数了,下面我来给大家整理一下这几个函数的一些用法.

PHP中,有3种方法来进行数组合并:操作符(+)、array_merge、array_merge_recursive,其中前两种方式为一维数组的合并,第三种为递归合并.

在说PHP的数组合并之前,先要明白,PHP的数组分为索引数组和关联数组。索引数组是指没有键值和键值为数字的数组,关联数组是指键值为字符的数组。

下面说说操作符(+)和array_merge的区别:

1.当为索引数组时,合并相同键值的数组,操作符以最前面的值为合并后的结果,array_merge则是把相同键值的数组合并,并重新索引(不同键值的数组合并时,也会从0开始重新生成数字索引)。

1、"+"运算符

规则:当两个数组的键名是数字键名或者字符串键名 $c = $a + $b 在$a后追加($b在$a中不存在的键名)键名和值

注意:1、不覆盖,只是追加不存在的键名和对应的值 2、键名不重新索引 3、无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回.

例1:数字键名,代码如下:

$a = array( 
'a', 
); 
$b = array( 
'u', 
); 
$c = $a + $b; 
var_dump($c);

output: 

array(1) { 
  [0]=> 
  string(1) "a" 
}

例2:数字键名,代码如下:

$a = array( 
66=>'a', 
); 
$b = array( 
60=>'u', 
66=>'c' 
); 
$c = $a + $b; 
var_dump($c);

output: 

array(2) { 
  [66]=> 
  string(1) "a" 
  [60]=> 
  string(1) "u" 
}

例3:字符键名,代码如下:

<?php
$a = array(
    1 => 'a',
    2 => 'b',
    'c' => 'c',
    'd' => 'd',
);
$b = array(
    1 => 'u',
    3 => 'v',
    'c' => 'w',
    'd' => 'x',
    'y' => 'y',
    60 => 'z',
);
$c = $a + $b;
var_dump($c);
//output:
array(
    7
) {
    [1] => string(1) "a"[2] => string(1) "b"["c"] => string(1) "c"["d"] => string(1) "d"[3] => string(1) "v"["y"] => string(1) "y"[60] => string(1) "z"
}
?>

2.当为关联数组时,合并相同字符键值的数组,操作符合并规则是前面的覆盖后面的,array_merge则是后面的覆盖前面的.

例,代码如下:

<?php
$arr5 = array(
    'a' => 'aaaa'
);
$arr6 = array(
    'a' => 'bbbb'
);
var_dump($arr5 + $arr6);
var_dump(array_merge($arr5, $arr6));
//输出:
array(
    size = 1
) 'a' => string'aaaa'(length = 4) array(
    size = 1
) 'a' => string'bbbb'(length = 4)
?>

array_merge() 将一个或多个PHP数组合并起来,一个数组中的值附加在前一个数组的后面,返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值,然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面.

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

3.array_merge_recursive的合并规则和array_merge相同,只是array_merge_recursive支持多维数组的合并,例,代码如下:

<?php
$a = array(
    1 => 'a',
    2 => 'b',
    'c' => 'c',
    'd' => 'd',
);
$b = array(
    1 => 'u',
    3 => 'v',
    'c' => 'w',
    'd' => 'x',
    'y' => 'y',
    60 => 'z',
);
var_dump(array_merge_recursive($a, $b));
//输出:
array(
    size = 8
) 0 => string'a'(length = 1) 1 => string'b'(length = 1) 'c' => array(
    size = 2
) 0 => string'c'(length = 1) 1 => string'w'(length = 1) 'd' => array(
    size = 2
) 0 => string'd'(length = 1) 1 => string'x'(length = 1) 2 => string'u'(length = 1) 3 => string'v'(length = 1) 'y' => string'y'(length = 1) 4 => string'z'(length = 1)


本文地址:http://www.phprm.com/shuzu/fs3206.html

转载随意,但请附上文章地址:-)

标签:array_merge array_merge_recursive

相关文章

发表留言