Avatar billede dj-hupi Nybegynder
08. marts 2011 - 13:23 Der er 5 kommentarer og
1 løsning

PHP List class?? Eller mulighed sætte flere ens objekter

Hej,

Jeg forsøger at lave en lignede funktion som list klassen der er i .NET.
Hvor du har mulighed for at oprette et objekt loope det.

Det er lidt svært at forklar men det jeg i bund og grund ønsker er at kunne sætte flere variabler

Eksemple:

$coll = new generic();

// Denne ville jeg gerne kunne loop/while/foreach. Så jeg kan indsætte flere fra eks. et XML udtræk.
$coll->addPerson('Name' => 'Rasmus', 'Adresse' => 'Odense');


Herefter løbe den igennem igen og skrive dem ud
Avatar billede BufferUnderrun Nybegynder
08. marts 2011 - 14:44 #1
Der er en del collections i .NET, men du kan bl.a. benytte følgende:

List<type> som er en liste af en type (kan være objekter, strings etc.). Ligger i namespace System.Collections.Generic.

Dictionary<Key,Value> som ligner dit eksempel, med key/value par. Her kan du enten gemme <string,string> hvis det skal være simpelt, eller <string,object> hvis du vil gemme personer.

Hvis jeg tager udgangspunkt i dit eksempel, så vil det nok være nemmest at lave et objekt, der repræsenterer din "person". Så kan du gemme en liste af personer således:

var personListe = new List<PersonObjekt>();

var nyPerson = new PersonObjekt();
nyPerson.Name = "Rasmus";
nyPerson.Address = "Odense";

personListe.Add(nyPerson);

Eksemplet er C# og benytter som sagt et objekt der hedder PersonObjekt, som har de angivne variabler Name og Address...
Avatar billede dj-hupi Nybegynder
08. marts 2011 - 14:52 #2
Husk lige at jeg sidder i PHP (INGEN System.Collections.Generic)

Er klassen så extended med ArrayObject?
Avatar billede BufferUnderrun Nybegynder
08. marts 2011 - 15:07 #3
Sorry, jeg har læst dit spørgsmål baglæns, jeg troede du gik fra PHP til ASP.NET.

Hvorfor benytter du så ikke bare et multidimensionelt Array eller et Array af objekter? Du har jo næsten selv skrevet koden, og der er rigeligt med eksempler her:

http://www.php.net/manual/en/function.array.php
Avatar billede dj-hupi Nybegynder
08. marts 2011 - 15:19 #4
Fordi jeg har svært ved at få det korrekt hevet ud igen via Foraeach eller en for...
Og de eksempler jeg har fundet er kun med 1 variable og 1 key
Jeg har brug for at kunne udvide Nav, Adresse, Telefon nummer osv..
Avatar billede repox Seniormester
08. marts 2011 - 17:19 #5
Et muligt forslag:
<?php


    class generic
    {
   
        private $persons_array;
   
        public function __construct()
        {
            $this->persons_array = array();
        }
       
        public function addPerson( $person )
        {
            $this->persons_array[] = $person;
        }
   
        public function getPersons($i = null)
        {
           
            if( is_int($i) )
                return $this->persons_array[$i];

            return $this->persons_array;
                   
        }
   
    }
   
   
    $coll = new generic();
   
    $coll->addPerson( array('Name' => 'Rasmus', 'Adresse' => 'Odense') );
    $coll->addPerson( array('Name' => 'Ole', 'Adresse' => 'Svendborg') );
    $coll->addPerson( array('Name' => 'Hans', 'Adresse' => 'Tollund') );

    // den nemme måde
    foreach($coll->getPersons() as $person)
    {
        echo $person['Name'];
        echo $person['Adresse'];
    }   

    // en alternativ måde
    for($i = 0; $i < count($coll->getPersons()); $i++)
    {
        $person = $coll->getPersons($i);
        echo $person['Name'];
        echo $person['Adresse'];
    }   

?>
Avatar billede Slettet bruger
09. marts 2011 - 00:34 #6
Hvis du har problemer med at kører din klasse igennem et loop, så kan du evt. prøve at kigge på PHPs interne Iterator interfaces...
Du kan læse lidt mere om det her:
http://www.php.net/manual/en/language.oop5.iterations.php
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