Я пишу foreach
, который не начинается с 0-го индекса, но вместо этого начинается с первого индекса моего массива. Есть ли способ компенсировать отправную точку цикла?
Как запустить цикл foreach с определенным индексом в PHP
Ответ 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)
по данному индексу