PHP中的array_merge函数:如何合并数组?
PHP中的array_merge函数是用来合并两个或多个数组的,返回一个新的数组,包含所有的输入数组的元素。合并后的数组中的键名是用该键名在输入数组中的出现顺序,对应键值与键名相同的后面的数组元素将覆盖前面的元素。
array_merge函数接受任意数量的数组作为参数,可以是基于数字索引的数组,也可以是基于字符串索引的数组。如下是示例:
$array1 = array(0 => 'apple', 1 => 'banana'); $array2 = array(2 => 'orange', 3 => 'pear'); $array3 = array(0 => 'melon', 4 => 'grape'); $result = array_merge($array1, $array2, $array3); print_r($result);
输出结果如下:
Array
(
[0] => apple
[1] => banana
[2] => orange
[3] => pear
[4] => grape
)
在此示例中,$array1包含两个元素,$array2包含两个元素,$array3包含两个元素。array_merge函数将这三个数组合并为一个数组,其中包含五个元素。注意,最后的$array3元素覆盖了之前的$array1元素,因为它们都有一个键为0的元素。
array_merge_recursive函数与array_merge函数有点不同。在array_merge_recursive函数中,使用相同键名的数组元素也会被合并和递归。如下所示:
$array1 = array('name' => 'John', 'skills' => array('php' => 6, 'css' => 7));
$array2 = array('name' => 'Mary', 'skills' => array('php' => 8, 'js' => 9));
$results = array_merge_recursive($array1, $array2);
print_r($results);
输出结果如下:
Array
(
[name] => Array
(
[0] => John
[1] => Mary
)
[skills] => Array
(
[php] => Array
(
[0] => 6
[1] => 8
)
[css] => 7
[js] => 9
)
)
在此示例中,$array1包含两个元素,其中'name' => 'John'是一个字符串,'skills'=>array('php' => 6, 'css' => 7)是一个关联数组。$array2也包含两个元素。这些数组都合并到了一个单一的数组,并且使用了相同的键名“name”和“skills”这两个键名的不同元素被合并到了一个数组。在“skills”键名下的“php”键名的数组也被合并成了一个新的数组,其中包含了这两个数组中对应键名的值。
如果是合并两个或者多个关联数组,其中有重复的键名,那么可以使用array_replace函数。array_replace函数用来替换第一个数组中与其他数组共享的相同键名的键值,如果这个键名在其他数组中不存在,就保留原先的数组中的键值。
比如:
$array1 = array('name' => 'John', 'age' => 20);
$array2 = array('name' => 'Mary', 'skill' => 'programming');
$result = array_replace($array1, $array2);
print_r($result);
输出结果如下:
Array
(
[name] => Mary
[age] => 20
[skill] => programming
)
在此示例中,$array1中有一个“name”键名的元素,值为‘John’。$array2中也有一个相同名字的键名,值为‘Mary’。通过使用array_replace()函数,最终的结果就仅仅保留了array2的最后一个“name”键名与对应的“Mary”键值。
在使用array_merge()函数合并数组时,需要注意以下几点:
1、合并多个数组时,只需要在array_merge()函数中分别放置这几个数组即可
2、使用array_merge_recursive()函数时,相同键名的值也会被递归合并
3、使用array_replace()函数时,只保留与其他数组不同的相同键值,其他的则被替换
例如:
$array1 = array('apple', 'banana', 'kiwi', 'strawberry');
$array2 = array('banana', 'apple', 'mango', 'peach', 'kiwi');
$array3 = array('apple', 'kiwi', 'mango', 'cherry');
$result1 = array_merge($array1, $array2, $array3);
$result2 = array_merge_recursive($array1, $array2, $array3);
$result3 = array_replace($array1, $array2, $array3);
print_r($result1);
echo '<br>';
print_r($result2);
echo '<br>';
print_r($result3);
echo '<br>';
输出结果如下:
Array
(
[0] => apple
[1] => banana
[2] => kiwi
[3] => strawberry
[4] => banana
[5] => apple
[6] => mango
[7] => peach
[8] => kiwi
[9] => apple
[10] => kiwi
[11] => mango
[12] => cherry
)
Array
(
[0] => apple
[1] => banana
[2] => kiwi
[3] => strawberry
[4] => banana
[5] => apple
[6] => mango
[7] => peach
[8] => kiwi
[9] => apple
[10] => kiwi
[11] => mango
[12] => cherry
)
Array
(
[0] => mango
[1] => kiwi
[2] => mango
[3] => cherry
)
可以看出,使用array_merge函数将三个数组合并为一个数组,由于有重复元素,所以最终的数组元素个数为13个。而使用array_merge_recursive函数将三个数组合并为一个二维数组,可以看到相同的元素被递归的放在了一个数组中。而使用array_replace函数,只有每个数组中与其他数组不同的元素被保留下来,其他相同的元素被替换掉了。
在PHP编程中,array_merge函数可以方便的解决元素合并的问题。对于多个数组,它能够快捷合并成一个数组,同时也可以用具体的情况选择不同的其他函数,如array_merge_recursive()和array_replace()等,以解决不同情况下的元素合并问题。
