代码之家  ›  专栏  ›  技术社区  ›  SoLoGHoST

数组移位函数的替代方法

  •  1
  • SoLoGHoST  · 技术社区  · 16 年前

    好的,我需要在这个数组中保留键,我只想从这个数组中移动第一个元素。实际上,我知道当我这样做时,这个数组的第一个键总是1:

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

    基本上,我不需要对它进行ksort来获取这个数组,其中key=1。而且,老实说,我不太喜欢数组移位,我只需要花很长时间。还有别的方法吗。也许是一种提取整个数组的方法,在其中可以找到$disabled_sections[1],而无需执行foreach并对其进行排序,以及array_shift。我只想将$disabled[1]添加到一个不同的数组中,并将其从这个数组中完全删除。同时保持两个数组键的结构不变。从技术上讲,这样做甚至可以:

    $array = array();
    $array = $disabled_sections[1];
    

    但它需要从$disabled_部分删除它。我能用这种方法吗…

    $array = array();
    $array = $disabled_sections[1];
    $disabled_sections -= $disabled_sections[1];
    

    像上面这样的事情有可能吗??

    谢谢。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Community Mohan Dere    11 年前

    当没有 -= 运算符,可以使用unset从数组中移除该元素:

    unset(disabled_sections[1]);
    

    但那只是实现你自己的转变。我想知道你在什么情况下 array_shift() “慢”和你的测试方法说慢。

    默认情况下,数值数组按数字排序-不需要ksort。也许你应该试试

    while($array = array_shift($group_of_arrays)) {
    
      // ... do stuff
    }
    

    如果不关心从数组中提取元素的顺序,可以使用“array_pop”而不是“array_shift”。由于“array_pop”将数组末尾的元素去掉,因此不需要重新编制索引,性能会显著提高。在使用大约80000个条目的数组进行测试时,我发现使用“array_pop”处理时间减少了90%。

        2
  •  4
  •   pinkgothic sudip    16 年前

    尽管有一个公认的答案;如果有人偶然发现了这一点,一种取消数组第一个元素设置的方法( 不管它的键或键的顺序 )不使用 array_shift 是:

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

    虽然我是 相当地 确信这就是 小精灵 是否在内部(因此我认为这不会带来性能提升),除了额外返回检索到的值:

    $element = reset($array); // also returns element
    unset($array[key($array)]);
    return $element;
    

    只是为了完成任务。

    推荐文章