Mostrar contenido de un objeto que se encuantra en un array

  • Autor Autor fais
  • Fecha de inicio Fecha de inicio
F

fais

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
hola, os cuento mi problema, hago 5 consultas a la base de datos que me devuelve una fila cada una en forma de objeto, y esa fila la agrego a una array, al final tengo un array con 5 objetos dentro, eso lo mando a la vista y todo correcto, el problema es al mostrarlo, no se recorrer el array montrandome el contenido de los objetos, y por mas que pruebo no doy con la tecla, alguine pude darme una pista por favor....

Gracias
 
para eso creo que un for es mejor, pero solo recorro el array...
 
PHP:
<?php
$variable_array[0] = (object) array(
          'casa' => 'madera', 'puerta' => 'madera'
          );
$variable_array[1] = (object) array(
          'casa' => 'ladrillos', 'puerta' => 'chapa'
          );

// recorres cada indice del array
foreach ($variable_array as $variable ) {
    echo $variable->casa . '<br>';
}
?>


Esto te sirve? (https://paiza.io/projects/7ZraiCalJ0dBm65lkWt3kA)
 
Como dice [MENTION=83163]TonchitoZ[/MENTION] deberás usar un foreach(), esto te permitirá recorrer el array completamente y poder usar los objetos de forma individual.
 
Ese codigo me arroja el siguente mensaje: Undefined property: CI_DB_mysql_result::$titulo
cuando el campo si que existe en la base de datos, te muestro como hago mi llamamiento a la base de datos:

PHP:
foreach ($id_aleatorios as $row) {
                $query = $this->db->query(' SELECT * FROM noticias where id_desa=' . $row . ' ORDER BY fecha_creacion DESC LIMIT 1');
                if ($query->num_rows() > 0) {
                    $array2[] = $query;
                }
              
            }

ese foreach se repite 5 veces, almacenado las cinco consultas en un array, a continuación le muestro como esta compuesto mi array justo usando el codigo que me mostro anteriormente:

imagen_codigo.webp
 
Lo que pasa es que lo estás guardando mal, lo que tu estás guardando es el objeto mysqli_result en vez de los registros.
Debería ser algo como:
PHP:
	$query = $this->db->query(' SELECT * FROM noticias where id_desa=' . $row . ' ORDER BY fecha_creacion DESC LIMIT 1');
	if ($query->num_rows() > 0) {
		while($reg = $query->fetch_assoc())	$array2[] = $reg;
	}
 
Última edición:
Gracias por fin lo consegui, adpate loq ue me distes a codeigniter y quedó así.
PHP:
if ($query->num_rows() > 0) {
                    foreach($query->result_array() as $row) { 
                            $array2[] = $row;
                    }
                }

Lo unico que ya tenia un arrays dentro de otro, no muchos objetos dentro de un array, pero me dio igual cambie la forma de mostarlo y punto:

PHP:
foreach ($noticias_destacadas as $key) {
       echo $key['id_desa']. '<br>';
   }

Muchas gracias a todo y dejo ahi la solución por si le es util a alguien 😉
 
Cuando se trata de la devolucion de un solo registro (con CodeIgniter) yo recurro a la funcion row() que lo que hace es devolverte en forma de objeto el resultado y no necesitas el for 😉

Es un proceso menos que te evitas. Quedaria de la siguiente manera:

PHP:
foreach ($id_aleatorios as $row) {
                $query = $this->db->query('SELECT * FROM noticias where id_desa=' . $row . ' ORDER BY fecha_creacion DESC LIMIT 1');
                if ($query->num_rows() > 0) 
                      $array2[] = $query->row();              
            }


Entonces te quedaría $array2[0]->id_desa ponele.


Yo igual lo emplorijaria metiendo todo en un modelo y realizando la siguiente consulta:
PHP:
function getNoticia($id) {
        $query = $this->db->query('SELECT * FROM noticias where id_desa=' . $id . ' ORDER BY fecha_creacion DESC LIMIT 1');
        if ($query->num_rows() == 1)
            return $query->row();
        return NULL;
    }

Y te va a devolver NULL o la fila encontrada 😉 . Es para ser un poquito mas ordenado nada mas :encouragement:
 
Atrás
Arriba