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 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。