【问题标题】:Get all elements in array besides the first one.. ? (php)获取数组中除第一个元素之外的所有元素.. ? (php)
【发布时间】:2009-12-17 04:57:07
【问题描述】:

有没有办法指定获取数组中除第一个元素之外的所有元素?我通常使用 foreach() 循环遍历我的数组。

说数组(1,2,3,4,5),我只想显示 2,3,4,5 并让它跳过 1。

【问题讨论】:

    标签: php arrays coding-style


    【解决方案1】:
    $arr = array(1,2,3,4,5);
    $all_but_the_first_element_array = array_slice($arr, 1);
    

    【讨论】:

    • 耶! array_shift() 的不可变版本!
    【解决方案2】:

    有多种方法可以解决这个问题。

    第一个解决方案是使用标志布尔值来指示第一个元素并继续您的foreach

    $firstElement = true;
    
    foreach($array as $key => $val) {
      if($firstElement) {
        $firstElement = false;
      } else {
        echo "$key => $val\n";
      }
    }
    

    如果你的元素是自然数字索引的,你不需要布尔标志,你可以简单地检查键是否为 0。

    foreach($array as $key => $val) {
      if($key === 0) continue;      
    
      echo "$key => $val\n";
    }
    

    第二种方法是欺骗你的方式进入一个自然数字索引的数组,如果它还没有的话。我将使用array_keys() 获取一个自然数字索引的键数组并循环它。

    $keys = array_keys($array);
    
    foreach($keys as $index => $key) {
      if($index === 0) continue;   
    
      $val = $array[$key];
      echo "$key => $val\n";
    }
    

    第三种方法是使用数组内部指针跳过第一个元素,然后使用reset()next()list()each() 继续循环。 性能和资源方面,这是最好的选择。但是可维护性受到很大影响。

    reset($array); // Reset pointer to 0
    next($array);  // Advance pointer to 1
    
    while (list($key, $val) = each($array)) {
      echo "$key => $val\n";
    }  
    

    如果你不介意丢失数组的第一个元素,你可以array_shift()它。

    array_shift($array);
    
    foreach($array as $key => $val) {
      echo "$key => $val\n";
    }
    

    您也可以array_slice() 数组。我还使用count() 以便能够将preserve_keys 参数设置为true

    $sliced = array_slice($array, 1, count($array)-1, true);
    
    foreach($sliced as $key => $val) {
      echo "$key => $val\n";
    }
    

    【讨论】:

    • 不会想到重置/下一步。不错。
    • 好吧,我碰巧爱上了 Javascript 的 Underscore.js,我很高兴他们有一个名为 Underscore.php 的 PHP 版本。它有很好的与集合(数组、对象等)交互的功能。例如,要执行上述操作,您只需执行__::rest(array(1,2,3,4,5)),它就会为您提供array(2,3,4,5)。它使用起来非常简单。
    • 请注意,您可以提供null 作为array_slice() 的第三个参数,以便使用preserve_keys,但不必计算所需的长度。
    • array_slice 是一个更好的解决方案
    【解决方案3】:

    array_shift()

    http://us2.php.net/manual/en/function.array-shift.php

    网站中使用的示例:

    <?php
    $stack = array("orange", "banana", "apple", "raspberry");
    $fruit = array_shift($stack);
    print_r($stack);
    ?> 
    

    上面的例子会输出:

    Array
    (
        [0] => banana
        [1] => apple
        [2] => raspberry
    )
    

    **记住,指向数组的指针在移位后被重置(新值)

    【讨论】:

    • 改变原始数组,丑陋:(
    【解决方案4】:

    嗯,有很多方法可以做到这一点,因为我们有大量可用的数组操作函数。但是我使用以下方法:

    $orig_array = array(1, 2, 3, 4 ,5);
    array_shift($orig_array);
    print_r($orig_array);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      相关资源
      最近更新 更多