Получить все элементы в массиве, кроме первого..? (РНР)

есть ли способ указать получение всех, кроме первого элемента в массиве? Обычно я использую foreach() для перебора моих массивов.

скажем array (1,2,3,4,5), я бы хотел только 2, 3, 4 ,5 показать и пропустить 1.

4 ответов


Существует несколько способов решения проблемы.

первое решение-использовать флаг boolean для указания первого элемента и продолжить в вашем 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";
}

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

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
)

**помните, что указатель на массив сбрасывается (новое значение) после смены


Ну, для этого может быть много способов, поскольку у нас есть много доступных функций манипуляции массивами. Однако для этого я использую следующий метод:

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