Как найти индекс foreach

Можно ли найти индекс foreach ?

в петле цикла следующим образом:

 for ($i = 0; $i < 10; ++$i) { echo $i . ' '; } 

$i даст вам индекс.

Должен ли я использовать цикл for или есть способ получить индекс в цикле foreach ?

 foreach($array as $key=>$value) { // do stuff } 

$key – это индекс каждого элемента $array

Вы можете поместить взлома в ваш foreach , например, поле, увеличивающееся при каждом прохождении, что именно то, что цикл for дает вам в массиве с числовой индексацией. Такое поле будет псевдо-индексом, который требует ручного управления (приращения и т. Д.).

Для foreach вы получите свой индекс в виде вашего $key значения $key , поэтому такой хак не нужен.

например, в foreach

 $index = 0; foreach($data as $key=>$val) { // Use $key as an index, or... // ... manage the index this way.. echo "Index is $index\n"; $index++; } 

Следует отметить, что вы можете вызвать key() на любом массиве, чтобы найти текущий ключ. Как вы можете догадаться, current() вернет текущее значение, а next() переместит указатель массива на следующий элемент.

У Оуэна есть хороший ответ. Если вам нужен только ключ, и вы работаете с массивом, это также может быть полезно.

 foreach(array_keys($array) as $key) { // do stuff } 

Вы можете создать $i вне цикла и сделать $i++ в нижней части цикла.

Эти две петли эквивалентны (например, безопасные перила):

 for ($i=0; $i<count($things); $i++) { ... } foreach ($things as $i=>$thing) { ... } 

например

 for ($i=0; $i<count($things); $i++) { echo "Thing ".$i." is ".$things[$i]; } foreach ($things as $i=>$thing) { echo "Thing ".$i." is ".$thing; } 

В массивах PHP есть внутренние указатели, поэтому попробуйте следующее:

 foreach($array as $key => $value){ $index = current($array); } 

Работает хорошо для меня (только очень предварительно протестировано).

Джонатан прав. Массивы PHP действуют как таблицы сопоставления карты со значениями. в некоторых случаях вы можете получить индекс, если ваш массив определен, например

 $var = array(2,5); for ($i = 0; $i < count($var); $i++) { echo $var[$i]."\n"; } 

ваш результат будет

 2 5 

в этом случае каждый элемент массива имеет знающий индекс, но если вы затем сделаете что-то вроде следующего

 $var = array_push($var,10); for ($i = 0; $i < count($var); $i++) { echo $var[$i]."\n"; } 

вы не получаете выход. Это происходит потому, что массивы в PHP не являются линейными структурами, как на большинстве языков. Они больше похожи на хеш-таблицы, которые могут иметь или не иметь ключей для всех сохраненных значений. Следовательно foreach не использует индексы для обхода над ними, потому что они имеют только индекс, если массив определен. Если вам нужно иметь индекс, убедитесь, что ваши массивы полностью определены до обхода над ними, и используйте цикл for.

Обычно я это делаю при работе с ассоциативными массивами:

 foreach ($assoc_array as $key => $value) { //do something } 

Это также отлично работает с неассоциативными массивами. $ key будет значением индекса. Если вы предпочитаете, вы также можете сделать это:

 foreach ($array as $indx => $value) { //do something } 

Я думаю, что лучший вариант такой же:

 foreach ($lists as $key=>$value) { echo $key+1; } 

это легко и нормально

 foreach(array_keys($array) as $key) { // do stuff } 
 foreach($arrvariable as $key=>$value){ echo "$key"; }