在php中快速获取数组偏移量的方法不那么糟糕


Less bad way to shortly getting an array offset in php

上下文

在php中,我们访问(在许多其他语言中一样)数组的元素(或字符串,当需要一个字符时)通过使用方括号语法[]确定偏移量或者一些本机函数,如array_push、array_pop。。。等

事实上,当我需要写缩短的代码时,我会按照以下方式进行:

这里只需要第一个偏移

$b = explode('_', $a)[0];

它是有效的,但我一直想知道它是否影响了表现,或者它是否在道德上是正确的。我没有在重复的帖子列表中找到(或搜索不好?),那么我试着坐下来分析这种行为。链接到我的工作台

我不知道我这条长凳的编码是正确的,但它看起来:静态访问花费更少的时间(少一半的时间)和最便宜的存储器,嗯,这是最便宜的内存,只有当我在bench中增加迭代次数时。。。我什么都不太确定。从逻辑上讲,array_shift应该是以下路径、访问第一个项、收缩内存以进行移位,还是简单地更改项指针地址?

根据你的说法,什么是最不坏的方法?

方法0

$b = explode('_', $a)[0];

方法1

$b = array_shift(explode('_', $a));

方法2

$b = explode('_', $a);
$b = array_shift($a);

如果我们谈论的是获取数组偏移量:
-访问第一个元素:

array_shift(explode('_', $a))

当然,它将比更慢、更消耗内存

explode('_', $a)[0]

因为array_shift函数从数组中提取第一个元素,并对所有其他元素进行重新索引
如果您对索引数组的性能感兴趣,请考虑SplFixedArray,因为它可以节省大约60%的内存。