Foros del Web » Programando para Internet » PHP »

Problema recogiendo un array multidimensional con un foreach

Estas en el tema de Problema recogiendo un array multidimensional con un foreach en el foro de PHP en Foros del Web. Hola a todos, estoy teniendo problemas con un script php, mis conocimientos son de nivel muy básico y estoy intentando hacer un script, a ver ...
  #1 (permalink)  
Antiguo 28/12/2007, 12:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
Pregunta Problema recogiendo un array multidimensional con un foreach

Hola a todos, estoy teniendo problemas con un script php, mis conocimientos son de nivel muy básico y estoy intentando hacer un script, a ver si podéis echarle un vistazo y decirme que hago mal.

Lo que intenta este bucle es recoger los valores que va generando el foreach en el array $resultados, no está funcionando, sólo guarda los resultados de una iteración del bucle en esa variable. Supongo que será un error de novato, pero llevo ya un buen rato estancado con esto...

Código:
foreach ( $servidor as $id => $valor ) {

  $rFq = new rFQuery ( $host, $servidor[$id]['serverport'] );

  // Query information from server
  if ($rFq->_queryServerInfo($tespera)) {
    // The server is online so assing the information
    $series  = strtolower($rFq->_getSeries());
    $track   = strtolower($rFq->_getTrack());
    $track   = strtr( $track, $transTrack);

    $resultado[$id]['online']   = 1;
    $resultado[$id]['version']  = $rFq->_getGameVersion();
    $resultado[$id]['nombre']   = $rFq->_getServerName();
    $resultado[$id]['damage']   = $rFq->_getDamageMultiplier();
    $resultado[$id]['pilotos']  = $rFq->_getCurPlayers() .'/'. $rFq->_getMaxPlayers();
    if ($rFq->_getCurPlayers() > 0) { $resultado[$id]['live'] = 1;}

    $resultado[$id]['motd']      = $rFq->_getServerMOTD();
    $resultado[$id]['series']    = strtr( $series, $transMod);
    $resultado[$id]['circuito']  = substr( $track, 0,25);

    $resultado[$id]['URL']       = 'rFactor://'. $ip_real .':'. $servidor[$id]['serverport'];

    $session = $rFq->_getSession();
    if (array_key_exists($session, $session_names)) {
      $resultado[$id]['info_sesion'] = $session_names[$session];

      if ($rFq->_getSessionTime() > 0) {
        $resultado[$id]['time_sesion'] = " [". gmdate("H:i:s", $rFq->_getSessionTime()) ."]";
      }

      // Recoge las vueltas q faltan si están en carrera
      if ($session == "SESSION_RACE") {
        $resultado[$id]['lapsfaltan']  = $rFq->_getSessionLaps();
      }
    }
  } else {
    $resultado[$id]['online'] = 0;
  }
}

He pegado sólo el código del bucle, está englobado en una función con return $resultados.

Os agradecería mucho que me echaráis un cable.
  #2 (permalink)  
Antiguo 28/12/2007, 13:37
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 21 años, 5 meses
Puntos: 9
Re: Problema recogiendo un array multidimensional con un foreach

¿ Estas seguro que $servidor tiene más de una iteración ?

Seria bastante bueno que pegues un var_dump() de $servidor para poder hacer una mejor depuración.

Ademas hay una condifición

if ($rFq->_queryServerInfo($tespera))

Quiza solo la esta cumpliendo un elemento del arreglo.

Última edición por eft0; 28/12/2007 a las 13:48 Razón: Nueva observacion
  #3 (permalink)  
Antiguo 28/12/2007, 13:52
 
Fecha de Ingreso: diciembre-2007
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Problema recogiendo un array multidimensional con un foreach

Me está pasando algo increible , no le encuentro explicación.

Desde el archivo que llamo a ese script he puesto otro foreach para comprobar como llegan los valores del return de esa función, el array $resultado vamos.

Este es el código debug:

Código:
echo "<p>##Servidores:</p>";
foreach ($resultado as $servidores => $valores ) {
  foreach ($resultado[$servidores] as $key => $value){
    echo  '<p><b>$resultado[</b><b style="color:#ff6600">'. $servidores .'</b><b>][</b>'. $key .'<b>]=</b>'. $value .'</p>';
  }
}
Pues bien, si le quito las etiquetas <b style="color:#ff6600"></b>, me saca sólo uno de los valores, pero con ella puesta salen todos, vamos que muestra los valores del array del script anterior solo con esas etiquetas puestas.

Lo he comprobado como 20 veces (quitando y poniendo). He probado otras etiquetas también y por el momento solo funciona con una que indique color y no es que me salga una de un color y otra de otro pq también me he fijado en eso, he mirado el código fuente de la página...

Con eso de que aquí en españa es el día de los inocentes, he llegado a pensar que me está vacilando el servidor... no le encuentro explicación...



El tespera es el tiempo de espera para la llamada a un puerto, pero es en local, así q debería de funcionar sin problema, aparte de eso la condición en caso de no cumplirse guarda otro valor en ese array

Código:
}else{
$resultado[$id]['online'] = 0;}


De todas formas tengo otro debug q saca los valores de $rFq y salen perfectamente, mientras que los de $resultado no...

Última edición por MichB; 28/12/2007 a las 13:57
  #4 (permalink)  
Antiguo 28/12/2007, 19:08
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 19 años, 4 meses
Puntos: 3
Re: Problema recogiendo un array multidimensional con un foreach

Cita:

Pues bien, si le quito las etiquetas <b style="color:#ff6600"></b>, me saca sólo uno de los valores, pero con ella puesta salen todos, vamos que muestra los valores del array del script anterior solo con esas etiquetas puestas.

Lo he comprobado como 20 veces (quitando y poniendo). He probado otras etiquetas también y por el momento solo funciona con una que indique color y no es que me salga una de un color y otra de otro pq también me he fijado en eso, he mirado el código fuente de la página...
Código PHP:
<b style="color:#ff6600"

no puedes por tener ' " " ' dentro de comillas simples dobles, pero si dentro de dobles simples,

digamos que las comillas dobles tienen potencia para escapar otros tipos de caracteres y hace que la impresion en php reaccione diferente de usar comillas simples a dobles,


ahora bien pueds tener tu codigo todo dentro de comillas dobles y en las etiketas poner comillas simples,



tan facil, " " " " has de cuanta que dentro de esa cadena hay otra cadena, dime tu como sabria el pareser cuando empieza una u otra, se haria bolas verdad?......

LO MISMO PASA CON ' "" ' SIMPLES CON DOBLES, LO MEJOR ES USANDO DOBLES Y SIMPLES A DENTRO O ESCAPANDO LAS COMILLAS \"\" O PUEDES USAR LA CONCATENACION...

SALUDOS!!
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #5 (permalink)  
Antiguo 28/12/2007, 19:50
 
Fecha de Ingreso: diciembre-2007
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
De acuerdo Re: Problema recogiendo un array multidimensional con un foreach

Gracias a todos por vuestra ayuda, el problema no era exatamente el que dices vevni, al menos en el script que puse arriba está todo correcto, quiero decir, pero si está ligeramente relacionado...

En ese scritp en concreto, se incluye un array que cambia unos valores por otros, pues bien, uno de ellos tenía una etiqueta html sin cerrar, lo que hacía que por algún motivo, el firefox desechara todo lo que venía después hasta encontrarse con algo que le gustara más... se ve que la etiqueta de estilo es justo lo q estaba buscando.

Una tarde entera perdida con una tontería de este tamaño...


Pero muchas gracias a todos por vuestra ayuda.
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 22:18.