Pergunta

É possível encontrar o índice foreach?

em um loop for da seguinte forma:

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

$i lhe dará o índice.

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

Foi útil?

Solução

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

$key é o índice de cada elemento $array

Outras dicas

Você pode colocar um corte em sua foreach, como um campo incrementado em cada run-through, que é exatamente o que o loop for dá-lhe em uma matriz numericamente indexado. Um tal campo seria um pseudo-índice que necessita de uma gestão manual (incrementos, etc).

A foreach lhe dará o seu índice na forma de seu valor $key, de modo tal corte 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 key() em qualquer matriz para encontrar a chave atual a sua por diante. Como você pode imaginar current() irá retornar o valor atual e next() irá mover o ponteiro do array para o próximo elemento.

Owen tem uma resposta boa. Se você quer apenas a chave, e você está trabalhando com uma variedade esta 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.

Estes dois loops são equivalentes (bar das grades de segurança, é claro):

for ($i=0; $i<count($things); $i++) { ... }

foreach ($things as $i=>$thing) { ... }

ex

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

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}

matrizes PHP têm ponteiros internos, então tente o seguinte:

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

Funciona bem para mim (somente muito preliminarmente testado embora).

Jonathan está correto. matrizes PHP agir como um mapeamento mapa da tabela de chaves para valores. em alguns casos, você pode obter um índice se a matriz é 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 tem um índice cognoscível, mas se você, em seguida, fazer algo como o seguinte

$var = array_push($var,10);

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

você recebe nenhuma saída. Isso acontece porque as matrizes em PHP não são estruturas lineares como eles são na maioria dos idiomas. Eles são mais como tabelas de hash que podem ou não podem ter chaves para todos os valores armazenados. Daí foreach não usar índices para rastejar sobre eles, porque eles têm apenas um índice se a matriz é definida. Se você precisa ter um índice, certifique-se suas matrizes estão totalmente definido antes de rastejar sobre eles, e usar um loop for.

Eu acho melhor opção é como mesmos:

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

é fácil e normalmente

Eu normalmente faço isso quando se trabalha com matrizes associativas:

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

Este belo trabalho vontade com matrizes não associativas também. $ Chave será o valor do índice. Se preferir, você pode fazer isso também:

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

Eu gostaria de adicionar isso, eu usei isso em laravel para indexar apenas a minha tabela:

  • Com US $ loop-> index
  • Eu também preIncrement com ++ $ circuito para iniciar em 1

Meu código:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach
foreach(array_keys($array) as $key) {
//  do stuff
}
foreach($arrvariable as $key=>$value){
echo "$key";
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top