Как запустить цикл foreach с определенным индексом в PHP

Я пишу foreach , который не начинается с 0-го индекса, но вместо этого начинается с первого индекса моего массива. Есть ли способ компенсировать отправную точку цикла?

Будь проще.

 foreach ($arr as $k => $v) { if ($k < 1) continue; // your code here. } 

Foreach сбросит массив:

Примечание. Когда первый запуск foreach запускается, внутренний указатель массива автоматически возвращается к первому элементу массива. Это означает, что вам не нужно вызывать reset () перед циклом foreach.

Либо используйте цикл for (только если это не ассоциативный массив)

 $letters = range('a','z'); for($offset=1; $offset < count($letters); $offset++) { echo $letters[$offset]; } 

или цикл while (может быть любым массивом)

 $letters = range('a','z'); next($letters); while($letter = each($letters)) { echo $letter['value']; } 

или с LimitIterator

 $letters = new LimitIterator(new ArrayIterator(range('a','z')), 1); foreach($letters as $letter) { echo $letter; } 

который позволяет указывать начальное смещение и рассчитывать через конструктор.

Все вышесказанное выведет буквы b в z вместо a в z

Вы можете использовать функцию array_slice :

 $arr = array(); // your array foreach(array_slice($arr, 1) as $foo){ // do what ever you want here } 

Конечно, вы можете использовать любое значение смещения, которое вы хотите. В этом случае 1 'пропустить' первый элемент массива.

В преддверии вы не можете этого сделать. Есть только два способа получить то, что вы хотите:

  1. Используйте цикл for и начинайте с позиции 1
  2. используйте foreach и используйте что-то вроде if ($ key> 0) вокруг вашего фактического кода

Предвестник делает то, что его имя говорит вам. Делать что-то для каждого элемента 🙂

EDIT : Хорошо, очень злой решение пришел мне на ум. Попробуйте следующее:

 foreach(array_reverse(array_pop(array_reverse($array))) as $key => $value){ ... } 

Это изменит массив, вытащит последний элемент и снова отменит его. Тогда у вас будет элемент, исключающий первый.

Но я бы рекомендовал использовать одно из других решений. Лучшим был бы первый.

И вариант: вы можете использовать array_slice () для этого:

 foreach(array_slice($array, 1, null, true) as $key => $value){ ... } 

Но вы должны использовать все три параметра, чтобы сохранить ключи массива для вашего цикла foreach:

Похоже, что цикл for – лучший способ пойти сюда, но если вы считаете, что ДОЛЖНЫ использовать foreach, вы можете перенести первый элемент из массива и снова отключить его:

 $a = array('foo','bar'); $temp = array_shift($a); foreach ( $a as $k => $v ) { //do something } array_unshift($a, $temp); 

Ну, ни один из них не сказал об этом, но если вы не возражаете изменить массив, и если мы хотим начать со второго элемента данного массива:

 unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever } с unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever } 

если вы не против, просто добавьте,

 $saved = $array; unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever } $array = $saved; с $saved = $array; unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever } $array = $saved; 

Более того, если вы хотите пропустить данный известный индекс, просто подставьте

 key($array) 

по данному индексу