php 7.4 的 Unpacking inside arrays (...)

时间:2019-12-08
本文章向大家介绍php 7.4 的 Unpacking inside arrays (...),主要包括php 7.4 的 Unpacking inside arrays (...)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

总的说明

php 7.4 增加了一个很有意思的功能

这是官方说明:

Unpacking inside arrays

<?php
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>
$fruits = [...$parts_1, ...$parts];

所以,本文探讨这个特性的用法的时候,会针对+, array_merge和...进行比较。

这个功能跟array_merge非常类似。

所以,针对这个功能,总共两种用法,除了示例中的,还有一个:

首先,针对字符串主键,也就是关联数组的情况

$arr_a = ['a' => 'aa', 'b' => 'ab', 'c' => 'ac'];
$arr_b = ['d' => 'bd', 'e' => 'be', 'c' => 'bc'];
print_r([...$arr_a, ...$arr_b]);
直接报错:
PHP Fatal error: Uncaught Error: Cannot unpack array with string keys

也就是,不支持关联数组。

其次,针对数字主键的数组

看代码:

$arr_a = [1 => 'aa', 0 => 'a0', 2 => 'ab', 3 => 'ac'];

$arr_b = [3 => 'bd', 4 => 'be', 5=> 'bc'];

print_r([...$arr_a, ...$arr_b]);
print_r([1 => 'aa', 0 => 'a0', 2 => 'ab', 3 => 'ac',...$arr_b]);
print_r($arr_a + $arr_b);
print_r(array_merge($arr_a, $arr_b));

  返回是:

Array
(
    [0] => aa
    [1] => a0
    [2] => ab
    [3] => ac
    [4] => bd
    [5] => be
    [6] => bc
)
Array
(
    [1] => aa
    [0] => a0
    [2] => ab
    [3] => ac
    [4] => bd
    [5] => be
    [6] => bc
)
Array
(
    [1] => aa
    [0] => a0
    [2] => ab
    [3] => ac
    [4] => be
    [5] => bc
)
Array
(
    [0] => aa
    [1] => a0
    [2] => ab
    [3] => ac
    [4] => bd
    [5] => be
    [6] => bc
)

  

总结

针对网上说对,... 可以代替array_merge 的情况,我想说的是:洗洗睡吧,你想多了,完全就是一个新功能,没有跟他彻底一直的情况。

1. ... 功能很明显是针对索引数组的,对关联数组无效。

2. 针对索引数组的情况,[...$parts_1, ...$parts_2] 等同于array_merge.

3. ... 对数组进行索引了重排序。

结论:

新功能就是在一些特殊场合下能用一下的新功能而已,想替代array_merge是想多了。

而且,个人感觉不怎么实用,在php里面,好像很少有地方专门去区分索引数组和和关联数组。

所以,个人认为:如果你不是c语言意义上的那种数组(连续数字主键),尽量别用这个吧,简直就是个坑啊!

另外说一句,php语言的数组是联合了其他语言的 数组,链表和哈希,综合而来,这一次的新功能,其实就是完全针对数组的。

原文地址:https://www.cnblogs.com/yxzamy/p/12004758.html