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
- OSX 上初步尝试 asp.net 5
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
- weiapi2.2 HelpPage自动生成接口说明文档和接口测试功能
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统摘要信息查看功能
- Envoy架构概览(5):负载均衡
- Envoy架构概览(6):异常检测
- Envoy架构概览(7):断路,全局限速和TLS
- Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
- 【前沿】TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文
- Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
- 跨平台:使用OWIN 为WebAPI 宿主
- 如何在UWP中统一处理不同设备间的页面回退逻辑
- new and override
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 不转字符串判断——LeetCode题目9:回文数
- 关于双指针的简单理解
- 面试题噩梦之一——LeetCode题目10:正则表达式匹配
- 什么时候触发GC
- 找找数学上的规律——LeetCode题目11:盛最多水的容器
- Java学习笔记, 不断更新
- 这题真是送分——LeetCode题目12:整数转罗马数字
- 该了解一波了!零基础入门Nginx
- 轻松一刻——LeetCode题目13:罗马数字转整数
- 动动手——LeetCode题目14:最长公共前缀
- LeetCode题目15:三数之和
- 三数之和姊妹题——LeetCode题目16:最接近的三数之和
- 组合问题——LeetCode题目17:电话号码的字母组合
- Python读取PDF文档并翻译
- n数之和题目要类比——LeetCode题目18:四数之和