替代array_shift函数

SoL*_*oST 2 php arrays split

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

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

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

$array = array();
$array = $disabled_sections[1];
Run Code Online (Sandbox Code Playgroud)

但是它需要将其从$ disabled_sections中删除。我可以使用这种方法吗?

$array = array();
$array = $disabled_sections[1];
$disabled_sections -= $disabled_sections[1];
Run Code Online (Sandbox Code Playgroud)

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

谢谢。

pin*_*hic 5

尽管对此有一个公认的答案;万一其他人偶然发现了这种情况,一种不使用而不设置数组第一个元素的方法(无论其键或键的顺序array_shift是:

reset($array); // sets internal array pointer to start
unset($array[key($array)]); // key() returns key of current array element
Run Code Online (Sandbox Code Playgroud)

尽管我相当确信这是array_shift内部的操作(所以我想这不会带来任何性能提升),但是要额外返回返回的值:

$element = reset($array); // also returns element
unset($array[key($array)]);
return $element;
Run Code Online (Sandbox Code Playgroud)

只是为了完成的缘故。

  • 这不是“足够” array_shift的功能,shift可以完成所有这些事情,而且在数字数组的情况下会对整个数组重新编号-这就是为什么在大型数组上它会变慢的原因。 (3认同)