Foros del Web » Programando para Internet » PHP »

comprobar siguiente valor en foreach

Estas en el tema de comprobar siguiente valor en foreach en el foro de PHP en Foros del Web. Hola, sabeis de alguna manera de acceder al siguiente elemento en un bucle foreach sin aumentar el puntero? Con aumentar el puntero me refiero a ...
  #1 (permalink)  
Antiguo 07/08/2012, 11:38
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
comprobar siguiente valor en foreach

Hola,

sabeis de alguna manera de acceder al siguiente elemento en un bucle foreach sin aumentar el puntero? Con aumentar el puntero me refiero a que no se haga uso del siguiente valor sin antes haber completado el ciclo completo.

La idea es recorrer un array y si el siguiente valor esta vacío no mostrar cierta info. Estoy medianamente obligado a usar foreach en lugar del for por lo que parto con el descarte de usar un for e incrementar el indice.

Ejemplo:

Código PHP:
foreach($array['datos'] as $datos) {
    echo 
$datos['foo']....
    if(empty(++
$datos) { //Un ejemplo que no funciona pero plasma la idea ++$datos
         
...
    }

Lo intente con next($datos) pero no vale para este caso.

Un saludo.
  #2 (permalink)  
Antiguo 07/08/2012, 12:31
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: comprobar siguiente valor en foreach

Pues aún con each avanzarías el puntero, por lo que te sugiero mejor manejar una función que te devuelva el contenido del siguiente elemento

Código PHP:
Ver original
  1. function siguiente($array,$key){
  2.    foreach($array as $clave =>$val){
  3.       if($clave==$key){
  4.          $x=1;
  5.          continue;
  6.       }
  7.       if(isset($x))
  8.          return $val;
  9.     }
  10.     return null;
  11. }
  #3 (permalink)  
Antiguo 07/08/2012, 13:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: comprobar siguiente valor en foreach

Yo iría por hacer un ciclo con while:
Código PHP:
Ver original
  1. while (($value = current($array)) !== false) {
  2.         // haces cosas con $value
  3.         $value = next($array);
  4.         if (empty($value)) { // haces algo si esta vacio
  5.         }
  6. }
  #4 (permalink)  
Antiguo 07/08/2012, 19:35
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: comprobar siguiente valor en foreach

GatorV muy bueno tu ejemplo, con tu permiso lo usaré así pq con el propio foreach no hayo manera ;)

ocp001a gracias igualmente ;)

PD: como apunte dejo unas pruebas de tiempo de ejecución de 10.000.000 de iteraciones que he realizado a un bucle while como ha propuesto GatorV y al foreach:
Código while:
while(($value = current($array)) !== false) {
$value = next($array);
}

Código foreach:
foreach($array as $value) {
}

Resultados:
while: 3.6912009716034 segundos
foreach: 4.4662549495697 segundos

Con varias pruebas el while siempre saca una ventaja de alrededor de 0.8 segundos menos, al menos para el bucle tal como lo he probado.

Un saludo

Última edición por erxaca; 07/08/2012 a las 19:50

Etiquetas: foreach, siguiente
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:42.