Pregunta

¿Es posible encontrar el índice foreach ?

en un bucle for de la siguiente manera:

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

$ i le dará el índice.

¿Tengo que usar el bucle for o hay alguna forma de obtener el índice en el bucle foreach ?

¿Fue útil?

Solución

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

$ key es el índice de cada elemento $ array

Otros consejos

Puede poner un truco en su foreach , como un campo incrementado en cada recorrido, que es exactamente lo que le proporciona el bucle for en forma numérica- matriz indexada Tal campo sería un pseudo-índice que necesita gestión manual (incrementos, etc.).

Un foreach le dará su índice en forma de su valor $ key , por lo que tal pirateo no debería ser necesario.

por ejemplo, en un 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++;
}

Cabe señalar que puede llamar a key () en cualquier matriz para encontrar la clave actual en la que está activada. Como puede adivinar, current () devolverá el valor actual y next () moverá el puntero de la matriz al siguiente elemento.

Owen tiene una buena respuesta. Si solo desea la clave y está trabajando con una matriz, esto también podría ser útil.

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

Puede crear $ i fuera del bucle y hacer $ i ++ en la parte inferior del bucle.

Estos dos bucles son equivalentes (salvo las barandillas de seguridad, por supuesto):

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

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

por ejemplo

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

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

Las matrices PHP tienen punteros internos, así que intente esto:

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

Funciona bien para mí (aunque solo muy preliminarmente probado).

Jonathan tiene razón. Las matrices PHP actúan como una tabla de asignación que asigna claves a valores. en algunos casos, puede obtener un índice si su matriz está definida, como

$var = array(2,5);

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

su salida será

2
5

en cuyo caso cada elemento de la matriz tiene un índice que se puede conocer, pero si hace algo como lo siguiente

$var = array_push($var,10);

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

no obtienes salida. Esto sucede porque las matrices en PHP no son estructuras lineales como lo son en la mayoría de los lenguajes. Son más como tablas hash que pueden o no tener claves para todos los valores almacenados. Por lo tanto, foreach no usa índices para rastrearlos porque solo tienen un índice si la matriz está definida. Si necesita tener un índice, asegúrese de que sus matrices estén completamente definidas antes de rastrearlas y use un bucle for.

Creo que la mejor opción es la misma:

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

es fácil y normalmente

Normalmente hago esto cuando trabajo con matrices asociativas:

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

Esto también funcionará bien con matrices no asociativas. $ clave será el valor del índice. Si lo prefiere, también puede hacerlo:

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

Me gustaría agregar esto, lo usé en laravel para indexar mi tabla:

  • Con $ loop- > index
  • También lo preincremento con ++ $ loop para comenzar en 1

Mi 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top