【发布时间】:2023-03-06 18:02:01
【问题描述】:
从 PHP7.4 开始,有一种新的可用技术可以用数字键重新索引数组。
我将其称为“array re-packing”或者类似“splatpacking”之类的有趣的东西。简单的过程涉及使用 splat 运算符 (...) - 也称为“扩展运算符” - 解包一个数组,然后通过“对称数组解构”用第一级元素填充一个新数组。
- RFC: Spread Operator in Array Expression
- The spread operator became available in PHP5.6
- Symmetric Array Destructuring became available in PHP7.1
- Laravel 新闻:Spread Operator for Arrays Coming to PHP 7.4
比较代码:(Demo)
$array = [2 => 4, 5 => 3, "3" => null, -10.9 => 'foo'];
var_export(array_values($array));
var_export([...$array]);
两者都会输出:
array (
0 => 4,
1 => 3,
2 => NULL,
3 => 'foo',
)
同样,splatpacking 技术仅限于带有数字键的数组,因为 splat 运算符会阻塞其他任何内容,并且只能在 PHP7.4 及更高版本中才能将解压后的值直接写入数组。
由于这两种技术在排位赛中提供相同的输出,我应该什么时候使用一种而不是另一种?
请注意,这不是关于如何重新索引键,而是比较 array_values() 与新可用技术。
这不同于:
- Re-index numeric array keys
- How do you reindex an array in PHP?
- PHP reindex array? [duplicate]
- array_unique and then renumbering keys [duplicate]
以及其他数十个询问如何重新索引数组的旧页面。
【问题讨论】:
-
我认为这是一段时间以来更有趣的 PHP 问题之一,尤其是因为它不是特定于框架的。这让我很好奇,如果它总是更慢,那么 splatpacking 是为了什么。只有语法糖?与采用展开运算符的其他语言保持一致?
-
这个问题看起来是“研究不足”、“不清楚”还是“对 Stack Overflow 来说是多余的”?那为什么它有一个负数?复仇,为什么?
标签: php arrays reindex argument-unpacking php-7.4