¿Es posible encontrar el foreach
índice?
en un for
bucle de la siguiente manera:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
te dará el índice.
¿Tengo que usar el for
bucle o hay alguna forma de obtener el índice en el foreach
bucle?
$myarr['foo'] = 'bar';
falla este métodovatiable++;
cada iteración. La forma tradicional, pero siempre ha funcionado.Puede poner un truco en su
foreach
, como un campo incrementado en cada recorrido, que es exactamente lo quefor
le da el bucle en una matriz indexada numéricamente. Tal campo sería un pseudo-índice que necesita gestión manual (incrementos, etc.).A
foreach
le dará su índice en la forma de su$key
valor, por lo que tal pirateo no debería ser necesario.por ejemplo, en un
foreach
fuente
Cabe señalar que puede llamar
key()
a cualquier matriz para encontrar la clave actual. Como puede suponercurrent()
, devolverá el valor actual ynext()
moverá el puntero de la matriz al siguiente elemento.fuente
$key
from$key=>$value
) ... Sin embargo, apuesto a que el rendimiento más bajo no es significativo / perceptible en un bucle simple.Owen tiene una buena respuesta. Si solo desea la clave, y está trabajando con una matriz, esto también podría ser útil.
fuente
foreach(array_keys($array) as $index=>$key)
.Puede crear
$i
fuera del bucle y hacer$i++
en la parte inferior del bucle.fuente
Estos dos bucles son equivalentes (excluye las barandillas de seguridad, por supuesto):
p.ej
fuente
Creo que la mejor opción es la misma:
es facil y normalmente
fuente
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
su salida será
en cuyo caso cada elemento de la matriz tiene un índice que se puede conocer, pero si hace algo como lo siguiente
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.
fuente
$var[] = 10;
(vea el enlace PHP para guiar), por lo que el segundofor
ciclo genera los resultados esperados.Las matrices PHP tienen punteros internos, así que intente esto:
Funciona bien para mí (aunque solo muy preliminarmente probado).
fuente
Normalmente hago esto cuando trabajo con matrices asociativas:
Esto funcionará bien con matrices no asociativas también. $ clave será el valor del índice. Si lo prefiere, también puede hacer esto:
fuente
Me gustaría agregar esto, lo usé en laravel para indexar mi tabla:
Mi código:
fuente
$loop
variable no se puede usar porque se le pide PHP general.Resolví de esta manera, cuando tuve que usar el índice y el valor foreach en el mismo contexto:
fuente
fuente