总的说明

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. MIT线性代数:8.求解Ax=b,可解性和结构

  2. Go服务监控

    使用Golang可以开发出高性能的HTTP.GRPC服务.一般项目运行后,我们也需要监控服务的性能或者进行调试.除了打日志,还有没有其他可视化的方案呢?答案是有的. 本文将会介绍几种常用的监控方案. ...

  3. Map Reduce 论文阅读

    Map Reduce 是 Google 在 2004 年发表的一篇论文,原文链接 在这 后来 Hadoop 直接内置了这一框架. 读完之后记录一下心得. 主要背景:MapReduce 的出现很具有工程 ...

  4. [考试反思]1005csp-s模拟测试61:休止

    连续不知道多少场了,都是一场10名以内一场20以外...波动极大...还极有规律... 拿到这套题,看到T1大模拟无话可说. 然后考场上我觉得T2很简单....然后就码了两个半小时. T3数据水了暴力 ...

  5. [考试反思]0810NOIP模拟测试16:黎明

    好吧,你尽力啦.我不说什么啦 []200 []180 [6]170 [7]160 [11]150 [12]140 还好,和前面的差距不大.虽说没有原来最好的那段时间考得那么好,但貌似还可以接受. 这次 ...

  6. Spring Cloud Gateway使用简介

    Spring Cloud Gateway是类似Nginx的网关路由代理,有替代原来Spring cloud zuul之意: Spring 5 推出了自己的Spring Cloud Gateway,支持 ...

  7. 『题解』洛谷P4016 负载平衡问题

    title: categories: tags: - mathjax: true --- Problem Portal Portal1:Luogu Portal2: LibreOJ Descripti ...

  8. Linux 项目 shell 自动获取报告本机IP (1) | 通过shell 自动获取报告本机IP

    由于电脑设置静态IP经常出现链接不上网络,动态IP又非常不方便,故有了这个想法并实现 原理: Linux,包含PC机器,树莓派等,通过shell 自动获取报告本机IP  | 通过 Mutt+Msmtp ...

  9. mpvue+小程序云开发,纯前端实现婚礼邀请函

    请勿使用本文章及源码作为商业用途! 前言 当初做这个小程序是为了婚礼前的需要,结婚之后,希望这个小程序能够留存下来,特地花了一些空闲时间将小程序转化成为“相册类小程序” 体验码 准备工作 mpvue框 ...

  10. jquery写$ document.getElementById效果

    jquery写$ document.getElementById效果<pre>document.getElementById('video-canvas')和$('#video-canva ...