Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/03/2013, 16:57
granvia86
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Dudas al procesar un json con php

Gracias Tribi,


Efectivamente el json estaba mal. ¿Hay alguna forma de limpiar los valores?


Ahora tengo dudas a la hora de manejar el array que obtengo del json, ya que dentro del array principal hay otros arrays y ya me pierdo...


Al hacer json_decode se me forma el siguiente array:
array(3) { [0]=> array(3) { ["event"]=> string(6) "reject" ["ts"]=> int(1360889409) ["msg"]=> array(9) { ["ts"]=> int(1360889409) ["subject"]=> string(25) "Recuperar datos de acceso" ["email"]=> string(46) "[email protected] m" ["tags"]=> array(0) { } ["opens"]=> array(2) { [0]=> array(1) { ["ts"]=> int(1360853698) } [1]=> array(1) { ["ts"]=> int(1360894742) } } ["clicks"]=> array(0) { } ["state"]=> string(4) "sent" ["_id"]=> string(32) "119cc81e81c54094b7c01043a9ae6f16" ["sender"]=> string(17) "[email protected]" } } [1]=> array(3) { ["event"]=> string(4) "send" ["ts"]=> int(1360889461) ["msg"]=> array(9) { ["ts"]=> int(1360889461) ["subject"]=> string(25) "Recuperar datos de acceso" ["email"]=> string(21) "[email protected]" ["tags"]=> array(0) { } ["opens"]=> array(0) { } ["clicks"]=> array(0) { } ["state"]=> string(4) "sent" ["_id"]=> string(32) "a95089c5eb144c6c82ee9e8947af44c0" ["sender"]=> string(17) "[email protected]" } } [2]=> array(3) { ["event"]=> string(11) "hard_bounce" ["ts"]=> int(1361476626) ["msg"]=> array(12) { ["ts"]=> int(1361476207) ["subject"]=> string(21) "Registro como usuario" ["email"]=> string(23) "[email protected]" ["tags"]=> array(0) { } ["state"]=> string(7) "bounced" ["_id"]=> string(40) "8188169.60c5c7109d0147f88dfc660e520d9e47" ["_version"]=> int(1) ["diag"]=> string(33) "smtp;550 #5.1.0 Address rejected." ["category"]=> string(17) "mcbouncetype:hard" ["bgtools_code"]=> int(10) ["sender"]=> string(17) "[email protected]" ["bounce_description"]=> string(11) "bad_mailbox" } } }


Yo tengo el siguiente código:

Código PHP:
$data json_decode($jsontrue);


echo
"<br><br>test<br><br>registros<br>";


for (
$i 0$icount($data); $i++) {
    
    echo 
"Evento: "; print $data[$i][event];
    echo
"<br>";
    echo 
"ts: "; print $data[$i][ts];
    echo
"<br>";
    echo 
"id correo: "; print $data[$i][msg][_id];
    echo
"<br>";
    echo 
"correo enviado el: "; print $data[$i][msg][ts];
    echo
"<br>";
    echo 
"destinatario mail: "; print $data[$i][msg][email ];
    echo
"<br>";
    echo 
"remitente: "; print $data[$i][msg][sender ];
    echo
"<br>";
    echo 
"asunto: "; print $data[$i][msg][subject];
    echo
"<br>";
    echo 
"estado envio: "; print $data[$i][msg][state];
    echo
"<br>";    
    echo 
"tema bounces: "; print $data[$i][msg][diag];
    echo
"<br>";        
    echo 
"tema bounces2: "; print $data[$i][msg][bounce_description];
    echo
"<br> opens";        

if (
array_key_exists('opens'$data[$i][msg]) and count($data[$i][msg])>) {

foreach(
$data[$i][msg][opens] as $opens) {
   echo 
"abierto "; print $opens[ts];
}

}
else { echo
"ninguna vez";}

    
//echo "opens: "; print $data[$i][msg][opens][0][ts];
    
echo"<br><br>";
    } 

Pues bien tengo un problema a la hora de trabajar con opens, que tiene un array con las horas a las que el correo ha sido abierto.

¿Hago bien hacer un foreach dentro de un foreach?


El problema que tengo es que a veces no viene el array opens dentro del json, y para que no me salga un warning puse array_key_exists pero claro me interesa que si el array está vacío aparezca ninguno y no funciona la condicional que puse.

¿Hay alguna forma de escribir el segundo foreach? De que sólo lo haga si existe el array opens y NO está vacío?


Gracias ;)