Estas dos líneas no son iguales:
Código PHP:
Ver original$notif_estructura[] = (int)$notif->tipo
$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<?php
$notif_estructura = array(); $i = 0;
$existe = false;
$notif->tipo = 5;
$notif->autor_id = 45;
$notif_estructura[0]->tipo = 3;
$notif_estructura[0]->autor_id = 23;
$notif_estructura[1]->tipo = 4;
$notif_estructura[1]->autor_id = 34;
$notif_estructura[2]->tipo = 6;
$notif_estructura[2]->autor_id = 21;
for ($i = 0, $limite = count ($notif_estructura); $i < $limite; $i++){ if ($notif->autor_id == $notif_estructura[$i]->autor_id) {
$existe = true;
break;
}
$nuevoIndice = $i;
}
$nuevoIndice++;
if (!$existe) {
$notif_estructura[$nuevoIndice]->tipo = $notif->tipo;
$notif_estructura[$nuevoIndice]->autor_id = $notif->autor_id;
}
for ($i = 0, $limite = count ($notif_estructura); $i < $limite; $i++){ echo "Tipo: " . $notif_estructura[$i]->tipo . "<br />";
echo "Autor: " . $notif_estructura[$i]->autor_id . "<br /><br />";
}
/* Lo anterior imprime la siguiente lista:
Tipo: 3
Autor: 23
Tipo: 4
Autor: 34
Tipo: 6
Autor: 21
Tipo: 5
Autor: 45
*/
?>
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