好的,我需要将键保留在该数组中,而我只想从该数组中移出第一个元素。实际上,我知道执行此操作时,此数组的第一个键将始终为1:

// Sort it by 1st group and 1st layout.
ksort($disabled_sections);
    foreach($disabled_sections as &$grouplayout)
        ksort($grouplayout);

基本上,我宁可不必对它进行ksort来获取键= 1的数组。老实说,我不是array_shift的忠实拥护者,它只需要很长时间的IMO。还有另一种方法。也许是一种提取找到$ disabled_sections [1]的整个数组的方法,而无需执行foreach并对其进行排序和array_shift。我只想将$ disabled [1]添加到另一个数组中,然后将其从该数组中完全删除。在保持两个数组键不变的情况下,它们保持原样。从技术上讲,这样做甚至可以:
$array = array();
$array = $disabled_sections[1];

但是它需要将其从$ disabled_sections中删除。我可以使用这种方法吗?
$array = array();
$array = $disabled_sections[1];
$disabled_sections -= $disabled_sections[1];

像上面的东西甚至可能吗?

谢谢。

最佳答案

虽然没有-=运算符,但是可以使用unset从数组中删除该元素:

unset(disabled_sections[1]);

但这只是实现您自己的shift版本。我确实想知道在什么情况下array_shift()会“变慢”,以及您如何测试所说的慢度。

默认情况下,数字数组按数字排序-不需要ksort。也许你应该尝试像
while($array = array_shift($group_of_arrays)) {

  // ... do stuff
}

如果您不关心将元素从数组中拉出的顺序,则可以使用“array_pop”而不是“array_shift”。由于“array_pop”将元素移出数组的末尾,因此无需重新索引,并且性能会大大提高。在测试约80,000个条目的数组时,我发现“array_pop”处理时间减少了90%。

关于php - 替代array_shift函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2735211/

10-13 09:09