while recorrer multidimensional length for ejemplos asociativo array php

recorrer - Cómo iniciar un ciclo foreach en un índice específico en PHP



recorrer array asociativo php (6)

Bueno, ningún cuerpo lo dijo, pero si no te importa alterar la matriz y si queremos comenzar desde el segundo elemento de la matriz dada:

unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever }

si te importa, solo agrega,

$saved = $array; unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever } $array = $saved;

Además, si desea omitir un índice conocido dado, simplemente sustituya

key($array)

por el índice dado

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?


En un foreach no puedes hacer eso. Solo hay dos formas de obtener lo que desea:

  1. Use un ciclo for y comience en la posición 1
  2. usa un foreach y usa algo como if ($ key> 0) alrededor de tu código real

Un foreach hace lo que su nombre te está diciendo. Hacer algo por cada elemento :)

EDITAR : OK, una solución muy malvada vino a mi mente. Pruebe lo siguiente:

foreach(array_reverse(array_pop(array_reverse($array))) as $key => $value){ ... }

Eso revertiría la matriz, saltará el último elemento y lo revertirá nuevamente. Entonces tendrás un elemento que excluye el primero.

Pero recomendaría usar una de las otras soluciones. Lo mejor sería el primero.

Y una variación: puede usar array_slice () para eso:

foreach(array_slice($array, 1, null, true) as $key => $value){ ... }

Pero debe usar los tres parámetros para conservar las claves de la matriz para su ciclo foreach:


Mantenlo simple.

foreach ($arr as $k => $v) { if ($k < 1) continue; // your code here. }

Ver la estructura de control de continue en el manual.


Parece que un bucle for sería la mejor manera de ir aquí, pero si crees que DEBES usar foreach, podrías cambiar el primer elemento de la matriz y volverlo a activar:

$a = array(''foo'',''bar''); $temp = array_shift($a); foreach ( $a as $k => $v ) { //do something } array_unshift($a, $temp);


Puede usar la función array_slice :

$arr = array(); // your array foreach(array_slice($arr, 1) as $foo){ // do what ever you want here }

Por supuesto, puede usar el valor de compensación que desee. En este caso, 1 ''omita'' el primer elemento de la matriz.


Un Foreach restablecerá la matriz:

Nota: Cuando foreach comienza a ejecutarse, el puntero de la matriz interna se restablece automáticamente al primer elemento de la matriz. Esto significa que no necesita llamar a reset () antes de un ciclo foreach.

Utilice un bucle for (solo si esto no es una matriz asociativa)

$letters = range(''a'',''z''); for($offset=1; $offset < count($letters); $offset++) { echo $letters[$offset]; }

o un ciclo while (puede ser cualquier matriz)

$letters = range(''a'',''z''); next($letters); while($letter = each($letters)) { echo $letter[''value'']; }

o con un 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.

Todo lo anterior dará como resultado las letras b a z en lugar de a z