Я пишу 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
'пропустить' первый элемент массива.
В преддверии вы не можете этого сделать. Есть только два способа получить то, что вы хотите:
Предвестник делает то, что его имя говорит вам. Делать что-то для каждого элемента 🙂
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)
по данному индексу