Как я могу узнать, сколько раз контур foreach конструирует в PHP, не используя переменную «counter»?

Если у меня есть конструкция 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 как цикл, хотя и короче …)