Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/01/2014, 11:08
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 3 meses
Puntos: 977
Respuesta: problema con in_array - Null Given

Estas dos líneas no son iguales:

Código PHP:
Ver original
  1. $notif_estructura[] = (int)$notif->tipo
  2. $notif_estructura[$notif_tipo]

En la primera, simplemente estás asignando el valor de $notif->tipo al array $notif_estructura y como lo asignas sin indicar un índice, estos se organizarán automáticamente desde el 0 hasta el número de elementos que ingreses menos uno. Cuando haces $notif_estructura[$notif_tipo], puedes estar tomando un valor que no corresponda con uno existente. Supongamos que ingresaste diez números al array, si el valor de $notif_tipo en una de las iteraciones fue 453, definitivamente no existirá un valor para dicha posición en el array.

Yo lo haría de este modo:
Código PHP:
Ver original
  1. <?php
  2. $notif_estructura = array();
  3. $i = 0;
  4. $existe = false;
  5.  
  6. $notif->tipo = 5;
  7. $notif->autor_id = 45;
  8.  
  9. $notif_estructura[0]->tipo = 3;
  10. $notif_estructura[0]->autor_id = 23;
  11.  
  12. $notif_estructura[1]->tipo = 4;
  13. $notif_estructura[1]->autor_id = 34;
  14.  
  15. $notif_estructura[2]->tipo = 6;
  16. $notif_estructura[2]->autor_id = 21;
  17.  
  18. for ($i = 0, $limite = count ($notif_estructura); $i < $limite; $i++){
  19.     if ($notif->autor_id == $notif_estructura[$i]->autor_id) {
  20.         $existe = true;
  21.         break;
  22.     }  
  23.     $nuevoIndice = $i;
  24. }
  25.  
  26. $nuevoIndice++;
  27.  
  28. if (!$existe) {
  29.     $notif_estructura[$nuevoIndice]->tipo = $notif->tipo;
  30.     $notif_estructura[$nuevoIndice]->autor_id = $notif->autor_id;
  31. }
  32.  
  33. for ($i = 0, $limite = count ($notif_estructura); $i < $limite; $i++){
  34.     echo "Tipo: " . $notif_estructura[$i]->tipo . "<br />";
  35.     echo "Autor: " . $notif_estructura[$i]->autor_id . "<br /><br />";
  36. }
  37.  
  38. /* Lo anterior imprime la siguiente lista:
  39.  
  40. Tipo: 3
  41. Autor: 23
  42.  
  43. Tipo: 4
  44. Autor: 34
  45.  
  46. Tipo: 6
  47. Autor: 21
  48.  
  49. Tipo: 5
  50. Autor: 45
  51. */
  52. ?>

Con ayuda de un bucle, voy comparando uno a uno los datos correspondientes a autor_id con el que deseo ingresar, si existe, cambio el valor de mi comodín y salgo del bucle. Si el comodín es falso, quiere decir que no existe el dato en el array y procedo a insertarlo. Puse datos ficticios para que se entienda la idea. Aquí puedes verlo en ejecución.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 06/01/2014 a las 11:14