Como encontrar o índice foreach

É possível encontrar o índice foreach ?

em um loop for, da seguinte forma:

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

$i lhe darei o índice.

Eu tenho que usar o loop for ou há alguma maneira de obter o índice no loop foreach ?

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

$key é o índice de cada elemento $array

Você pode colocar um hack em seu foreach , como um campo incrementado em cada run-through, que é exatamente o que o loop for dá em uma matriz numericamente indexada. Esse campo seria um pseudo-índice que precisa de gerenciamento manual (incrementos, etc.).

Um foreach lhe dará seu índice na forma de seu valor de $key , então esse hack não deve ser necessário.

por exemplo, em um 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++; } 

Note-se que você pode chamar a key() em qualquer matriz para encontrar a chave atual. Como você pode adivinhar current() retornará o valor atual e next() moverá o ponteiro da matriz para o próximo elemento.

Owen tem uma boa resposta. Se você quiser apenas a chave, e você está trabalhando com uma matriz, isso também pode ser útil.

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

Você pode criar $i fora do loop e fazer $i++ na parte inferior do loop.

Esses dois laços são equivalentes (barra os rails de segurança, é claro):

 for ($i=0; $i$thing) { ... } 

por exemplo

 for ($i=0; $i$thing) { echo "Thing ".$i." is ".$thing; } 

Arrays PHP têm pointers internos, então tente isso:

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

Funciona bem para mim (apenas muito preliminarmente testado).

Jonathan está correto. As matrizes de PHP atuam como uma tabela de mapa que mapeia chaves para valores. Em alguns casos, você pode obter um índice se sua matriz for definida, como

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

sua saída será

 2 5 

caso em que cada elemento na matriz possui um índice cognivel, mas se você fizer algo como o seguinte

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

você não obteve saída. Isso ocorre porque os arrays em PHP não são estruturas lineares, como estão na maioria dos idiomas. Eles são mais como tabelas de hash que podem ou não ter chaves para todos os valores armazenados. Por isso, foreach não usa índices para rastejar sobre eles porque eles só têm um índice se a matriz for definida. Se você precisa ter um índice, verifique se as matrizes estão totalmente definidas antes de rastejar sobre elas e usam um loop for.

Acho que a melhor opção é igual à mesma:

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

é fácil e normalmente

Normalmente faço isso ao trabalhar com arrays associativos:

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

Isso também funcionará bem com arrays não associativos. $ chave será o valor do índice. Se você preferir, você pode fazer isso também:

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