Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Error al cambiar un array normal dentro de una clase por un ArrayObject

Estas en el tema de Error al cambiar un array normal dentro de una clase por un ArrayObject en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas. Estoy creando una clase llamada "Eventos" para mostrar los resultados de dicha tabla como prueba, todo ello con un array normal. Código PHP: class  ...
  #1 (permalink)  
Antiguo 31/07/2012, 18:17
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Error al cambiar un array normal dentro de una clase por un ArrayObject

Buenas.

Estoy creando una clase llamada "Eventos" para mostrar los resultados de dicha tabla como prueba, todo ello con un array normal.

Código PHP:
class Eventos
{
    
//private $evento;
    
    
public function __construct()
    {
        
$this->evento=array();
    }
    
    public function 
get_eventos()
    {
        
$sql="Select *  from eventos";
        
$res=mysql_query($sqlConectarBd::conectar());        
        if(!
$res)
        {
            throw new 
Exception ("Error en la consulta:"mysql_error());            
        }        
        while(
$reg=mysql_fetch_assoc($res))
        {                
            
$this->evento[]=$reg;
        }
            return 
$this->evento;
    }

Y para mostrar los restultados hago esto:

Código PHP:
$obj_e = new Eventos();
$ver_eventos $obj_e->get_eventos();
    for(
$i=0;$i<sizeof($ver_eventos);$i++)
    {
        echo 
"Responsable: " .$ver_eventos[$i]["responsable"]."<br />";
        echo 
"Evento: " .$ver_eventos[$i]["evento"]."<br />";
        echo 
"Fecha: " .$ver_eventos[$i]["fecha"];
    } 
Y todo bien.

Ahora si hago una prueba de ArrayObject con un for de esta manera todo bien:

Código PHP:
$eventos_e= new ArrayObject(array("Jorguito""Panolo""Andrei"));
for(
$iterator $eventos_e->getIterator(); $iterator->valid();$iterator->next())
 {

    echo 
$iterator->key();
    echo 
"-";
    echo 
$iterator->current();
    echo 
"<br>";

Sin embargo ahora trato de aplicar eso a la clase anterior y no soy capaz, por ejemplo cambio en __contruct a ArrayObject pero luego no me salen las opciones correspondientes como me salían con un ArrayObject sin estar en una clase:

Código PHP:
public function __construct()
    {
        
//$this->evento=array();
        
$this->eventoArrayObject(array());
    } 
¿Como podría aplicarlo en esa misma clase?
  #2 (permalink)  
Antiguo 31/07/2012, 20:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

Te faltaría el $this->evento = new ArrayObject();

Saludos.
  #3 (permalink)  
Antiguo 31/07/2012, 22:07
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

Hola GatorV

Lo he cambiado y ahora si me da el menu para crear el for con valid, current, key y demás, sin embargo el resultado ahora es de :

0-Array
1-Array

He cambiado esta linea:

Código PHP:
public function __construct()
    {
        
//$this->evento=array();
        
$this->evento= new ArrayObject();
         
    } 
y lo llamo asi:

Código PHP:
$obj_e = new Eventos();
try
{
//aqui colocaremos el código a validar
    
$ver_eventos $obj_e->get_eventos();    
    for(
$iterator $ver_eventos->getIterator(); $iterator->valid();$iterator->next())
     {
        echo 
$iterator->key();
        echo 
"-";
        echo 
$iterator->current();
        echo 
"<br>";
    }    
}
catch(
Exception $e)//aquí ponemos la excepción
{
    
//Aquí pongo los mensajes de error;    
    
Eventos::error();

La clase completa que tengo ahora es esta:

Código PHP:
require_once("class.php");
interface 
Implementacion
{
    public static function 
error();    
}

class 
Eventos implements Implementacion
{    
    
    public static function 
error()
    {
        echo 
"<p class=\"error\">Error interno. Pongase en contacto con el administrador del sistema</p>";
    }
    public function 
__construct()
    {
        
//$this->evento=array();
        
$this->evento= new ArrayObject();
         
    }
    
    public function 
get_eventos()
    {
        
$sql="Select * from eventos";
        
$res=mysql_query($sqlConectarBd::conectar());        
        if(!
$res)
        {
            throw new 
Exception ("Error en la consulta:"mysql_error());            
        }        
        while(
$reg=mysql_fetch_assoc($res))
        {                
            
$this->evento[]=$reg;
        }
            return 
$this->evento;
    }    
    

¿Que me falta por añadir? Gracias por la ayuda, saludos
  #4 (permalink)  
Antiguo 01/08/2012, 09:25
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

es que el valor que tienes en el indice que estas mandando es un array, por eso te dice array, has esto
Código PHP:
Ver original
  1. for($iterator = $ver_eventos->getIterator(); $iterator->valid();$iterator->next())
  2.      {
  3.         echo $iterator->key();
  4.         echo "-";        
  5.         echo "<br>";
  6.         echo "<pre>"; print_r($iterator->current()); echo "</pre>";
  7.     }
y veras lo que tienes en el arreglo que esta en el valor que esta en el indice indicado, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 02/08/2012, 02:36
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

Hola carlos_belisario.

Gracias por tu ayuda, ahroa me salen los resultados pero no del todo bien, con esa opción ahora me sale así:

Código PHP:
0-

Array
(
    [
id_evento] => 1
    
[responsable] => Miguel García
    
[evento] => Concentración Motera 2012
    
[fecha] => 2012-07-11
    
[hora] => 21:00:00
    
[cantidad_invitados] => 500
    
[salon] => Terraza de Verano
    
[persona_velcar] => David
)

1-

Array
(
    [
id_evento] => 2
    
[responsable] => Miguel
    
[evento] => Fiesta Trance
    
[fecha] => 2012-08-08
    
[hora] => 18:00:00
    
[cantidad_invitados] => 300
    
[salon] => Salón modelo
    
[persona_velcar] => Agustín

Sigo sin entender como pasar de un array normal a un ArrayObject desde una clase pero con una consulta sql.
  #6 (permalink)  
Antiguo 02/08/2012, 08:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

Pues ya lo tienes, $iterator->current() es un array con todos esos datos, tendrías que asignarlo a una variable y así obtener la/las columna/s que quieras:
Código PHP:
Ver original
  1. $row = $iterator->current();
  2. echo $row['id_evento'];
  #7 (permalink)  
Antiguo 08/08/2012, 04:18
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

Hola de nuevo.

Creo que ahora sí:

Código PHP:
Ver original
  1. $ver_eventos = $obj_e->get_eventos();      
  2.     for($iterator = $ver_eventos->getIterator(); $iterator->valid();$iterator->next())
  3.     {          
  4.         $row = $iterator->current();                       
  5.         echo $row['id_evento']. " - " . $row['responsable']. "-" . $row['evento']."<br />";
  6.     }

¿Y si fuese con un while o un foreach? Lo intento pero no logro sacarlo, por ejemplo con un while siguiendo el ejemplo anterior:

Código PHP:
Ver original
  1. $iterator_w = $ver_eventos->getIterator();
  2.     while ($iterator_w->valid())//recorro el array
  3.     {      
  4.         //$iterator_w->key();
  5.         //echo $iterator_w->current(). "-";//Imprimo el valor      
  6.         $row_w = $iterator_w->current();
  7.         echo $row['id_evento']. " - " . $row['responsable']. "-" . $row['evento']."<br />";
  8.         $iterator_w->next()."<br />";//Pasa al siguiente valor para seguir recorriendo los demás.
  9.     }

Con foreach todavía menos, solo desde la variable $datos como arrayobjetc:

Código PHP:
Ver original
  1. $datos=new ArrayObject(array("Julio","Silvia Vega","Nicolaza González","Matías Fernández"));
  2.  
  3. foreach ($datos->getIterator() as $id => $d )
  4. {
  5.     echo $id;
  6.     echo "-";
  7.     echo $d."<br>";
  8. }

Si intento hacerlo como los anteriores la verdad tampoco se la manera.:

Código PHP:
Ver original
  1. foreach($ver_eventos->getIterator() as $id=> $v)   
  2.     {
  3.             echo $v."<br />";
  4.     }

¿Algún ejemplo relacionado para extraer resultados desde consultas sql?

Gracias de nuevo, saludos.
  #8 (permalink)  
Antiguo 08/08/2012, 04:45
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

Con foreach ya lo he arreglado:

Código PHP:
Ver original
  1. foreach($ver_eventos->getIterator() as $id=> $v)   
  2.     {
  3.             //echo $v."<br />";
  4.             echo "Responsable: " .$v["responsable"]."<br />";
  5.     }

Ahora me falta solo saber hacerlo con un while.
  #9 (permalink)  
Antiguo 08/08/2012, 09:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

¿Que error te da con el while?
  #10 (permalink)  
Antiguo 08/08/2012, 09:12
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error al cambiar un array normal dentro de una clase por un ArrayObject

Hola GatorV.

Era que tenía el mismo valor $row del anterior ejemplo y siempre me cogía el último valor:

Código PHP:
Ver original
  1. echo $row['id_evento']. " - " . $row['responsable']. "-" . $row['evento']."<br />";

en vez de:

Código PHP:
Ver original
  1. echo $row_w['id_evento']. " - " . $row_w['responsable']. "-" . $row_w['evento']."<br />";

Ahora por fin me sale correcto:

Código PHP:
Ver original
  1. $iterator_w = $ver_eventos->getIterator();
  2. while ($iterator_w->valid())//recorro el array
  3.     {      
  4.         $iterator_w->key();
  5.         //echo $iterator_w->current(). "-";//Imprimo el valor      
  6.         $row_w = $iterator_w->current();
  7.         echo $row_w['id_evento']. " - " . $row_w['responsable']. "-" . $row_w['evento']."<br />";
  8.         $iterator_w->next()."<br />";//Pasa al siguiente valor para seguir recorriendo los demás.
  9.     }

Muchas gracias por vuestra ayuda, saludos.

Etiquetas: arrayobject, clase, mysql, sql, tabla
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 13:27.