Estoy escribiendo un foreach
que no comienza en el índice 0, sino que se inicia en el primer índice de mi matriz. ¿Hay alguna manera de compensar el punto de partida del bucle?Cómo iniciar un ciclo foreach en un índice específico en PHP
Respuesta
En un foreach no puedes hacer eso. Sólo hay dos maneras de conseguir lo que quiere:
- utilizar un bucle y empezar en la posición 1
- utilizar un foreach y utilizar un algo así como si ($ tecla> 0) alrededor de su código real
Un foreach hace lo que su nombre te está diciendo. Hacer algo para cada elemento :)
EDITAR: OK, una solución muy mal llegó justo a mi mente. Intente lo siguiente:
foreach(array_reverse(array_pop(array_reverse($array))) as $key => $value){
...
}
Eso invertiría la matriz, saltará el último elemento y lo revertirá nuevamente. Entonces tendrás un elemento que excluye el primero.
Pero yo recomendaría utilizar una de las otras soluciones. Lo mejor sería el primero.
y una variación: Puede utilizar array_slice() para que:
foreach(array_slice($array, 1, null, true) as $key => $value){
...
}
embargo, usted debe utilizar los tres parámetros para mantener las claves de la matriz en el bucle foreach:
usando array_slice es posible hacer esto en un bucle foreach, pero esa práctica debe ser altamente desaconsejada y castigada por tener que leer ese tipo de código. – Kris
Es por eso que señalé que es un método MALO para hacer eso. Pero no usaría ninguna de las solutoínas personalmente. Yo usaría una instrucción if o un ciclo for. – 2ndkauboy
Usted puede utilizar la función array_slice
:
$arr = array(); // your array
foreach(array_slice($arr, 1) as $foo){
// do what ever you want here
}
Por supuesto, se puede usar cualquier valor de desplazamiento que desee. En este caso, 1
'omita' el primer elemento de la matriz.
No vale la pena que esto requiera hacer una copia de ese pedazo de la matriz. Podría ser algo malo si la matriz es grande. –
Tienes razón ... esto funcionará mejor para arreglos cortos. Gracias por tu comentario. – Cristian
parece un bucle for sería el mejor camino a seguir aquí, pero si usted piensa que usted debe usar foreach que podría cambiar el primer elemento de la matriz y cancelará el cambio de nuevo en:
$a = array('foo','bar');
$temp = array_shift($a);
foreach ($a as $k => $v) {
//do something
}
array_unshift($a, $temp);
Solo señalando que la sintaxis '$ k => $ v' es solo para matrices asociativas. Para las matrices indexadas, solo quieres '$ a as $ v'. –
@Michael: el $ k => $ v también funcionará para la matriz indexada y devolverá el número de índice del valor actual. – 2ndkauboy
¡Oh ... genial! : D lol –
Manténgalo sencillo.
foreach ($arr as $k => $v) {
if ($k < 1) continue;
// your code here.
}
Un Foreach
se restablecerá la matriz:
Nota: Cuando foreach comienza su primera ejecución, el puntero interno se restablece automáticamente al primer elemento de la matriz. Esto significa que no necesita llamar a reset() antes de un ciclo foreach.
utilizar un bucle for
(sólo si esto es no una matriz asociativa)
$letters = range('a','z');
for($offset=1; $offset < count($letters); $offset++) {
echo $letters[$offset];
}
o un bucle while
(puede ser cualquier matriz)
$letters = range('a','z');
next($letters);
while($letter = each($letters)) {
echo $letter['value'];
}
o con una LimitIterator
$letters = new LimitIterator(new ArrayIterator(range('a','z')), 1);
foreach($letters as $letter) {
echo $letter;
}
que le permite especificar el desplazamiento de inicio y contar a través del constructor.
toda la producción voluntad por encima de las letras a, b para z en lugar de A a Z
Bien ningún cuerpo dijo, pero si no te importa la alteración de la matriz y si queremos empezar desde el segundo elemento de la matriz dada:
unset($array[key($array)]);
foreach($array as $key=>$value)
{
//do whatever
}
si lo hace la mente, sólo tiene que añadir,
$saved = $array;
unset($array[key($array)]);
foreach($array as $key=>$value)
{
//do whatever
}
$array = $saved;
Por otra parte, si desea omitir un índice conocido dado, simplemente subtitute
key($array)
por el índice dado
- 1. Cómo escribir un ciclo FOR FOREACH en PL/SQL?
- 2. Iniciar la aplicación en un momento específico
- 3. ¿Cómo iniciar un BackgroundWorker en un momento específico?
- 4. ¿Cómo se obtiene el índice de la iteración actual de un ciclo foreach?
- 5. ¿Cómo obtener el índice de un ciclo en Applescript?
- 6. ¿Hay alguna manera de romper un ciclo foreach en velocidad?
- 7. ¿Cómo omito una iteración de un ciclo `foreach`?
- 8. ¿Cómo puedo iniciar animaciones CSS3 en un lugar específico?
- 9. Variables de índice múltiple en el bucle foreach de PHP
- 10. Agregar un objeto a un índice específico de un NSMutableArray
- 11. ¿Es posible acceder al índice en un Hash cada ciclo?
- 12. ¿Cómo encontrar último índice del bucle foreach en Smarty
- 13. En python, ¿cómo excluyo archivos de un ciclo si comienzan con un conjunto específico de letras?
- 14. Cómo omitir un registro en un Foreach
- 15. ¿Cómo inserto un modelo en una colección backbone.js en un índice específico?
- 16. inserte en un índice específico para mongo array
- 17. Índice negativo de matriz en PHP
- 18. ¿Cómo iniciar/detener un cronjob usando PHP?
- 19. Tengo 2 fechas en PHP, ¿cómo puedo ejecutar un ciclo foreach para pasar por todos esos días?
- 20. PHP: ¿Cómo se determina cada enésima iteración de un ciclo?
- 21. Iniciar un daemon desde PHP
- 22. php orden aleatorio de un foreach
- 23. Iniciar tareas en foreach Utiliza el valor del último elemento
- 24. ¿Cómo puedo limitar la cantidad de elementos iterados en un ciclo foreach?
- 25. ¿cómo puedo señalar PHP glob a un directorio específico?
- 26. PHP DOP bindParam estaba cayendo en un foreach
- 27. ¿Cómo se puede implementar un índice hacia adelante en PHP?
- 28. PHP - Toma el primer elemento con un foreach
- 29. ¿Cómo insertar un carácter en un índice específico de cadena usando C#?
- 30. Java ArrayList reemplazar en el índice específico
No sería mejor si se utiliza PARA lugar? – Prix
Manejar los pares clave-valor es mucho más fácil en un ciclo foreach y supongo que esa es la razón por la que quería tomar un foreach. O incluso tiene un foreach y no quiere cambiar una gran cantidad de código. – 2ndkauboy