获取数组中除第一个元素外的所有元素.. ? (php)

32

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

比如说数组(1,2,3,4,5),我只想显示2、3、4和5,而跳过1。

4个回答

58
$arr = array(1,2,3,4,5);
$all_but_the_first_element_array = array_slice($arr, 1);

5
太棒了!现在有一个不可变的 array_shift() 版本了! - CpILL

37

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

第一种解决方法是使用标志变量来表示第一个元素,然后在你的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";
}

1
没想到还有重置/下一个的功能,不错。 - Aaron
我恰好爱上了Javascript的Underscore.js,很高兴他们有一个PHP版本叫做Underscore.php。它具有与集合(数组、对象等)交互的良好功能。例如,要执行上述操作,只需执行__::rest(array(1,2,3,4,5)),它会给你array(2,3,4,5)。使用起来非常简单。 - gthuo
请注意,您可以在调用 array_slice() 函数时将第三个参数设置为 null,以便使用 preserve_keys 选项而无需计算所需的长度。 - M Somerville
array_slice是一个更好的解决方案。 - nkkollaw

10

array_shift()

https://www.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
)

记住,在移位之后,数组的指针会被重置(获得新的值)。

2
修改了原始数组,很丑 :( - CpILL

2

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接