总的说明

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语言的数组是联合了其他语言的 数组,链表和哈希,综合而来,这一次的新功能,其实就是完全针对数组的。

php 7.4 的 Unpacking inside arrays (...)的更多相关文章

  1. PHP 7.4.0发布!一起看看有哪些新特性

    PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新. 看了英文手册后,发现其进行了许多改进,并带来了一些新特性,现在将这些新特性您: 1.Typed Properties 类型 ...

  2. PHP 7.4.0 发布

    近日,PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新. PHP 7.4.0 进行了许多改进,并带来了一些新特性,包括: Typed Properties  类型属性 类属性 ...

  3. php7.4 更新特性

    PHP 7.4.0 Released! The PHP development team announces the immediate availability of PHP 7.4.0. This ...

  4. Top 10 Mistakes Java Developers Make--reference

    This list summarizes the top 10 mistakes that Java developers frequently make. #1. Convert Array to ...

  5. Golang学习--TOML配置处理

    上一篇文章中我们学会了使用包管理工具,这样我们就可以很方便的使用包管理工具来管理我们依赖的包. 配置工具的选择 但我们又遇到了一个问题,一个项目通常是有很多配置的,比如PHP的php.ini文件.Ng ...

  6. Golang 的 TOML库

    TOML 的全称是 Tom's Obvious, Minimal Language,因为它的作者是 GitHub 联合创始人 Tom Preston-Werner. TOML 的目标是成为一个极简的配 ...

  7. PatentTips - Sprite Graphics Rendering System

    BACKGROUND This disclosure relates generally to the field of computer graphics. More particularly, b ...

  8. TOML配置文件

    Toml是一种易读.mini语言,由github前CEO,Tom创建.Tom's Obvious, Minimal Language. TOML致力于配置文件的小型化和易读性.wiki:https:/ ...

  9. Core Java Volume I — 3.10. Arrays

    3.10. ArraysAn array is a data structure that stores a collection of values of the same type. You ac ...

随机推荐

  1. 子树问题(DP)

    这题显然是DP 首先,\(dp[i][j]\)表示树深度小于等于i,树的大小为j的有根树的数量$ 可以循环枚举根节点编号次大的子树的大小k. \(dp[i][j]=\sum^{j-1}_{k=1}dp ...

  2. CSPS_103

    被sdfz踩爆了! %%%kai586123 %%%Gekoo %%%sdfz_yrt T1 我以为是水题!一直在肝! 而且为什么每次我的考场暴力都是考后才调出来啊!! 先记录一下正解的大神做法: 按 ...

  3. CSPS模拟 72

    状态..找不回来了.. T2 简单的期望 考试的时候忘考虑一个事,就是连续多位进位的情况 考试的时候打出$n^2$复杂度dp还没引起怀疑真是不应该. T3 简单的操作 最后一刻才想到图不联通,已经想不 ...

  4. js调用局部打印功能并还原

    function printme() { //printMain为要打印的dom元素 window.document.body.innerHTML = document.getElementById( ...

  5. 关于css布局的一点记录

    1 关于css实现水平垂直居中的一些方法: .css的定位:用margin,padding,position position:absolute;   //绝对定位,一般父级元素采用relative来 ...

  6. 关于swoole 定时器有时候无法清除的解决方法

    关于swoole 定时器有时候无法清除的解决方法 有时候start里面写个定时器 有时候你关闭进程的时候 发现定时器还是可以进行 目前只有重启服务器才可以 清除 还有就是ps -ef | grep p ...

  7. C语言程序设计100例之(10):最大公约数

    例10        最大公约数 问题描述 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. 输入数据 第 ...

  8. Android Debug 之 Log 最佳实践

    本文微信公众号「AndroidTraveler」首发. 背景 在开发过程中,调试是必不可少的一项工作. 当我们要确定项目的逻辑时,当我们要了解界面的生命周期时,当我们发现新写的逻辑与期望效果不一致时, ...

  9. 点击a标签的时候出现虚影

    在a标签中添加 outline:none;就可以去除了

  10. Linux从git上下东西

    git clone 网址 git clone https://github.com/walkor/Workerman