Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Держите его простым.

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

Ответ 2

A Foreach будет reset массив:

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

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

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

или a 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

Ответ 3

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

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

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

Ответ 4

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

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

A foreach делает то, что его имя говорит вам. Выполнение чего-то для каждого элемента:)

РЕДАКТИРОВАТЬ: ОК, очень плохое решение пришло мне на ум. Попробуйте следующее:

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

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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;

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

key($array)

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