Если у меня есть конструкция foreach
, как эта:
foreach ($items as $item) { echo $item . "<br />"; }
Я знаю, что могу отслеживать, сколько раз контуров конструкции можно использовать с помощью переменной счетчика, например:
$counter = 0; $foreach ($items as $item) { echo $item.' is item #'.$counter. "<br />"; $counter++; }
Но возможно ли сделать это без использования переменной «счетчик»? То есть, возможно ли узнать количество итераций в цикле foreach
, не требуя «счетной» переменной?
Примечание. Я полностью согласен с использованием счетчиков в моих циклах, но мне просто интересно узнать, есть ли условие для этого, встроенного непосредственно в PHP … Это похоже на потрясающую конструкцию foreach
которая упростила некоторые операции, которые являются clunkier когда делая то же самое, используя конструкцию for
.
Нет, это невозможно, если ваши $items
– это массив, имеющий смежные индексы (ключи), начинающиеся с ключа 0.
Если у него есть непрерывные индексы, выполните:
foreach ($items as $k => $v) { echo $k, ' = ', $v, '<br />', PHP_EOL; }
Но, как утверждали другие, нет ничего неправильного в использовании счетной переменной.
Нет более простого способа – это то, для чего нужны счетные переменные.
Я предполагаю, что вы хотите узнать текущий счет во время цикла. Если вам просто нужно это знать, используйте count($items)
как предложили другие.
Вы могли бы сказать, сколько раз он будет цикл или СЛЕДУЕТ зацикливаться, выполняя
$loops = count($items);
Однако это будет работать только в том случае, если ваш код не пропускает итерацию каким-либо образом.
foreach петли N раз, где N – только размер массива. Поэтому вы можете использовать count($items)
чтобы узнать его.
EDIT Конечно, как заметил Bulk, ваша петля не должна ломаться (или, может быть, продолжить, но я бы считал continue
как цикл, хотя и короче …)