Foros del Web » Programando para Internet » PHP »

problema con in_array - Null Given

Estas en el tema de problema con in_array - Null Given en el foro de PHP en Foros del Web. Hola a todos, se me presenta un problema el cuál no encuentro el error detras de el, este es mi codigo: $consulta lleva una consulta ...
  #1 (permalink)  
Antiguo 06/01/2014, 09:47
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 16 años, 1 mes
Puntos: 9
problema con in_array - Null Given

Hola a todos, se me presenta un problema el cuál no encuentro el error detras de el, este es mi codigo:
$consulta lleva una consulta ya hecha a la db

Código PHP:
$notif_estructura=array();
while (
$notif $db->fetchObjetos($consulta)) {
 
if (
$notif->tipo) { //Evitamos crear grupos con valor vacio
  
$notif_estructura[]=(int)$notif->tipo//Agregamos tipo como grupo
  
$notif_tipo=(int)$notif->tipo;
   if (!
in_array($notif->autor_id,$notif_estructura[$notif_tipo])) {//verificamos que el usuario no haya sido agregado antes al mismo grupo
   
$notif_estructura[$notif_tipo][]=(int)$notif->autor_id//Agregamos usuarios al grupo tipo;
   
}
   }
//tipo
   

me muestra el siguiente error
Warning: in_array() expects parameter 2 to be array, null given in archivo on line linea

la verdad no se cual podria ser el problema, alguna ayuda?
  #2 (permalink)  
Antiguo 06/01/2014, 09:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con in_array - Null Given

El problema es que el parámetro 2 de in_array debe de ser un array, y tú le estas pasando lo que tienes guardado en $notif_estructura[$notif_tipo], lo cual es nulo.

Debes de pasarle todo $notif_estructura, el cual es el array que tiene tus datos.

Saludos.
  #3 (permalink)  
Antiguo 06/01/2014, 10:01
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: problema con in_array - Null Given

El problema GatorV, es que necesito verificar solo en solo en $notif_estructura[$notif_tipo] si ya existe el id que voy a agregar.

Si uso solo $notif_estructura va verificar en todo el array y no quiero eso, existe alguna otra forma de hacerlo?
  #4 (permalink)  
Antiguo 06/01/2014, 10:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con in_array - Null Given

Pues entonces asegurate que sea un array antes de verificar, ej:
Código PHP:
Ver original
  1. if (!isset($notif_estructura[$notif_tipo]) || !is_array($notif_estructura[$notif_tipo])) $notif_estructura[$notif_tipo] = array();
  #5 (permalink)  
Antiguo 06/01/2014, 11:08
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
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

Etiquetas: null, usuarios
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:33.