Получить все элементы в массиве, кроме первого ..? (РНР) - PullRequest
16 голосов
/ 17 декабря 2009

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

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

Ответы [ 4 ]

28 голосов
/ 17 декабря 2009

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

Первое решение состоит в том, чтобы использовать флаг 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() it.

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";
}
18 голосов
/ 17 декабря 2009
$arr = array(1,2,3,4,5);
$all_but_the_first_element_array = array_slice($arr, 1);
9 голосов
/ 17 декабря 2009

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
)

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

0 голосов
/ 17 декабря 2009

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

$orig_array = array(1, 2, 3, 4 ,5);
array_shift($orig_array);
print_r($orig_array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...