PHP 数组合并

数组合并是什么?
array_merge/array_replace/数组运算符/array_splice

这次就是说上面的区别的。

1. array_merge

1)该函数,官方解释:将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。
2)如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。(说明不会保留数字索引)
3)如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。(不保留数字索引的结果)

例子:

$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
Array
(
    [color] => green
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => trapezoid
    [4] => 4
)

4)该函数是非递归的,如果需要递归?array_merge_recursive() 可以做到

2. array_replace

这个函数优点类似,区别在于,他会把数字索引也会进行替换,其他的就与array_merge一样。
1)也提供了一个递归的函数array_replace_recursive()

3. 数组操作符

是不是有点懵圈?没听说过?但是你可能用过

例子 名称 结果
$a + $b 联合 $a 和 $b 的联合。
$a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE。
$a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。
$a != $b 不等 如果 $a 不等于 $b 则为 TRUE。
$a <> $b 不等 如果 $a 不等于 $b 则为 TRUE。
$a !== $b 不全等 如果 $a 不全等于 $b 则为 TRUE。

其中第一行,"联合"。这与上面两个函数的区别是?
区别是相对的,相对于array_replace来说,+操作符会保留第一个数组的元素,并不会发生替换,是一种补充的关系。而上面更像Mysql中的replace into或者on duplicate update

不过瘾?
好,在赠送两个。array_combineextract

array_combine(array $keys, array $values); 两个数组作为参数,并且合并。合并规则是,第一个数组的值作为合并之后的数组的键名,第二个数组的元素的值作为合并之后数组的元素的值。

extract:”拉出“,将数组导入到当前符号表。符号表又是什么鬼?符号表是存储变量名和变量地址之间的对应关系的地方。就是将数组元素,变为独立的变量;其键名是变量名,元素值为变量值。

4、array_splice

array_splice只能截取数组部分元素,而这个函数可以实现:批量替换,批量删除和批量插入

官方例子

<?php
// 删除
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
// $input is now array("red", "green")

// 删除
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, -1);
// $input is now array("red", "yellow")

// 替换
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange");
// $input is now array("red", "orange")

// 替换
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));
// $input is now array("red", "green",
//          "blue", "black", "maroon")

// 插入
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green",
//          "blue", "purple", "yellow");

5、 作用

说了那么多,根本不知道这些数组合并有什么厉害的地方。
array_replace可以用于数组的更新和插入,上面说过,这就像是replace into一样,你可以当数组是一个小型数据库。
例子:(名为add,其实可以替换)

public function add(array $parameters = array())
{
        $this->parameters = array_replace($this->parameters, $parameters);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
有什么想法欢迎提问或者资讯
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

file
这段打算介绍 array_slice 函数嘛,可是标题是 array_splice :sweat_smile:

5年前 评论

@sayhe110 哈哈,谢谢提醒,已经修改了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!