Foros del Web » Programando para Internet » PHP »

Borrar objetos array

Estas en el tema de Borrar objetos array en el foro de PHP en Foros del Web. Hola a todos, Estoy intentando añadir unos objetos a un array, eliminarlos y mostrarlos (cosa muy basica) pero me esta dando algunos problemas... Tengo una ...
  #1 (permalink)  
Antiguo 12/09/2011, 12:59
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Borrar objetos array

Hola a todos,

Estoy intentando añadir unos objetos a un array, eliminarlos y mostrarlos (cosa muy basica) pero me esta dando algunos problemas...

Tengo una clase con los siguientes metodos:

Código PHP:

function addObject($object){
        
//$this->vObjects[count($this->vObjects)]=$object;
        
array_push($this->vObjects$object);
    }
    function 
getObject($indx){
        return 
$this->vObjects[$indx];
    }
    function 
getNumObject(){
        return 
sizeof($this->vObjects);
    }
    function 
delObject($indx){
        echo 
"<br />";
        foreach (
$this->vObjects as &$value) {
            echo 
$value->getName();
        }
        echo 
"<br />";
        unset(
$this->vObjects[$indx]);
        foreach (
$this->vObjects as &$value) {
            echo 
$value->getName();
        }
    } 
el array vObjects esta declarado como:
Código PHP:
$this->vObjects=array(); 
Estoy intentado hacer lo siguiente:

Código PHP:
$object = new CObjectConsumable(2"nombre""descrip"1234105);
$object2 = new CObjectMaterial(2"nombreMat""descrip",  105);

$char = new CCharacter(1,"nick2");
echo 
$char->getNick()."<br />";    
$char->addObject($object);
$char->addObject($object2);
$char->addObject($object);
$char->addObject($object2);

echo 
$char->getObject(0)->getName();
echo 
$char->getObject(0)->getMana();
echo 
"<br />";
echo 
$char->getObject(1)->getName();
echo 
$char->getObject(1)->getDescription();
echo 
"<br />";
echo 
$char->getObject(2)->getName();
echo 
$char->getObject(2)->getDescription();

echo 
"<br />num ".$char->getNumObject();

$char->delObject(1);

echo 
"<br />num ".$char->getNumObject();

echo 
"<br />------------<br />";

echo 
$char->getObject(0)->getName();
echo 
$char->getObject(0)->getMana();
echo 
"<br />";
echo 
$char->getObject(1)->getName();
echo 
$char->getObject(1)->getDescription(); 

el resultado de esto es:


Código:
nick2
nombre12
nombreMatdescrip
nombredescrip
num 4
nombrenombreMatnombrenombreMat
nombrenombrenombreMat
num 3
------------
nombre12

Fatal error: Call to a member function getName() on a non-object in
Con esto intento crear un CCharacter, añadirle unos objetos, borrarlos y mostrarlos pero al borrar el elemento num 1 e intentar obtener este elemento y mostrarlo me da un error, sin embargo con el foreach funciona perfecto.

No se supone que cuando eliminas un elemento de un array con unset todos los elementos que esten por detras avanzan una posicion?
Como lo puedo solucionar?
  #2 (permalink)  
Antiguo 12/09/2011, 13:08
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Borrar objetos array

No, si borras por ejemplo
Código PHP:
Ver original
  1. <?php
  2. $arr = array(
  3.     0 => 'foo',
  4.     1 => 'bar',
  5.     2 => 'baz',
  6. );
  7. unset($arr[1]);
  8. var_dump($arr); // imprime array(2) { [0]=> string(3) "foo" [2]=> string(3) "baz" }
Vez como el key se queda como está desde el principio. Lo que sucede es que foreach no sigue un orden númerico establecido, sino que mira el próximo valor y su llave.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 12/09/2011, 13:46
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Borrar objetos array

y no hay algun metodo para volver a "montar" el array de forma que no queden indices vacios?


P.D. Se me ocurre recorrer el array con foreach, volver a montar otro array e igualarlo al anterior.


Un saludo y gracias.
  #4 (permalink)  
Antiguo 12/09/2011, 13:49
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Borrar objetos array

Creo recordar que esto te lo hacia ksort(), o alguna funcion parecida. Consulta esto:

http://es.php.net/manual/es/array.sorting.php


Saludos !
  #5 (permalink)  
Antiguo 12/09/2011, 13:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Borrar objetos array

Es sencillo, usa array_values.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 12/09/2011, 13:55
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Borrar objetos array

Cita:
Iniciado por abimaelrc Ver Mensaje
Es sencillo, usa array_values.
Solucionado:

Código PHP:
$this->vObjects=array_values($this->vObjects); 
Muchas gracias.
  #7 (permalink)  
Antiguo 12/09/2011, 13:56
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Borrar objetos array

Cita:
Iniciado por 3nr1c Ver Mensaje
Creo recordar que esto te lo hacia ksort(), o alguna funcion parecida. Consulta esto:

http://es.php.net/manual/es/array.sorting.php


Saludos !
Supongo que ordenandolo y metiendo las claves vacias al final tmb se podria solucionar.

Gracias.

Etiquetas: borrar, objetos
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 19:59.