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($json, true);
echo"<br><br>test<br><br>registros<br>";
for ($i = 0; $i< count($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])>0 ) {
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 ;)