Avatar billede jonas82 Nybegynder
07. maj 2005 - 00:17 Der er 5 kommentarer og
1 løsning

Slette bestemt objekt fra array

Jeg har et array indeholdende X antal Bil Objekter. Hvordan kan jeg komme til at slette det/de(der skulle helst kun være 1) objekter hvor $maerke = "Ford"?
class Bil
{
    var $farve;
    var $maerke;
    var $hk;
    function Bil($farve,$maerke,$hk)
    {
        $this->farve=$farve;
        $this->maerke=$maerke;
        $this->hk=$hk;
    }
}
$biler[]=new Bil('rød','Volvo',100);
$biler[]=new Bil('blå','Toyota',115);
$biler[]=new Bil('grøn','Ford',170);
Avatar billede apache999 Nybegynder
07. maj 2005 - 00:39 #1
Hmmm. Gik vist lidt i selvsving. Der må være en nemmere måde. Nå, men nedenstående virker i hvert fald:

<?

class Bil
{
    var $farve;
    var $maerke;
    var $hk;
   
    function Bil($farve,$maerke,$hk)
    {
        $this->farve=$farve;
        $this->maerke=$maerke;
        $this->hk=$hk;
    }
}
$biler[]=new Bil('rød','Volvo',100);
$biler[]=new Bil('blå','Toyota',115);
$biler[]=new Bil('grøn','Ford',170);

print_r($biler);

function destruerBil($array,$brand) {
   
   
    foreach ($array as $key => $bil) {
   
   
        if($bil->maerke == $brand) {
            $array = delArrayElementByKey($array,$key);
            return $array;
            hw_Deleteobject($bil);
            break;
        }
    }
   
   
}

function delArrayElementByKey($array_with_elements, $key_name) {
    $key_index = array_keys(array_keys($array_with_elements), $key_name);
    if (count($key_index) != '') {
        array_splice($array_with_elements, $key_index[0], 1);
    }
    return $array_with_elements;
  }

$biler = destruerBil($biler,"Ford");

echo "<br>";

print_r($biler);

?>
Avatar billede apache999 Nybegynder
07. maj 2005 - 00:40 #2
Æææh, ved ikke lige, hvor linjen hw_Deleteobject($bil); kommer fra, men den er selvfølgelig unødvendigt. I øvrigt er der kommet et return-statement umiddelbart før.
Avatar billede retep Nybegynder
07. maj 2005 - 00:41 #3
if (is_array($biler)){
    reset($biler);
    while (list($k,$obj) = each($biler)){
        if (strtolower($obj -> maerke) == strtolower("Ford")){
            unset($biler[$k]);   
        }
    }
}
Avatar billede jonas82 Nybegynder
07. maj 2005 - 00:56 #4
Det ligner en rigtig smuk løsning retep, og det virker  :-)
apache jeg fik ikke forsøgt dit, da reteps så lidt simplere ud ;-)

Mange tak til jer begge!
retep lægger du et svar?
Avatar billede coderdk Praktikant
07. maj 2005 - 15:33 #5
Til retep's kan du tilføje en array_unique() så fjerner den de "tomme" entries i arrayet :)
Avatar billede jonas82 Nybegynder
22. juni 2005 - 15:39 #6
Nå, lukker..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester