Avatar billede jonas82 Nybegynder
06. maj 2005 - 16:57 Der er 9 kommentarer og
2 løsninger

Multidimensionelt array

Jeg har brug for at gemme noget info i et Multi array. Et eksempel:

$bil['farve']['maerke']['hk'];

Er det en rigtig måde at oprette arrayet på?
Hvordan indsætter jeg så biler, og finder ud af hvor mange biler der er indsat?
Avatar billede xyborx Nybegynder
06. maj 2005 - 17:07 #1
Hvad med at bruge klasser i stedet for? Et hurtigt eksempel.

<?php
class Bil
{
    var $farve;
    var $maerke;
    var $hk;
    function Bil($farve,$maerke,$hk)
    {
        $this->farve=$farve;
        $this->maerke=$maerke;
        $this->hk=$hk;
    }
}

$biler=array();
$biler[]=new Bil('rød','Volvo',100);
$biler[]=new Bil('blå','Toyota',115);

echo('Der er '.count($biler).' biler:<br />');
foreach($biler as $bil)
{
    echo('En '.$bil->farve.' '.$bil->maerke.' med '.$bil->hk.'hk<br />');
}
?>

Vil fx skrive:
Der er 2 biler:
En rød Volvo med 100hk
En blå Toyota med 115hk
Avatar billede 7th Praktikant
06. maj 2005 - 17:09 #2
Umiddelbart ville jeg vælge at gemme det således:
print_r(array('ford' => array('farve' => 'blå', 'hk' => 123), 'audi' => array('farve' => 'grøn', 'hk' => 456)));

Hvis du har flere biler af samme mærke ville jeg vælge denne model:
print_r(array('a1' => array('farve' => 'blå', 'maerke' => 'ford', 'hk' => 123), 'b1' => array('farve' => 'grøn', 'maerke' => 'audi', 'hk' => 456)));
hvor a1 og b1 udgør et unikt nummer.
Avatar billede jonas82 Nybegynder
06. maj 2005 - 17:19 #3
Det ser jo rimelig overskueligt ud at lave det som en klasse. Det prøver jeg lige at kigge lidt på...
Avatar billede jonas82 Nybegynder
06. maj 2005 - 18:06 #4
Eksemplet virker fint nok, men jeg prøver at gemme det i en session variabel for at kunne fylde mere i et andet sted. Det kan jeg ikke rigtig få til at fungere.

Her er det kode jeg tester med. Jeg kan ikke tilføje nye til sessionen.

<?php
class Bil
{
    var $farve;
    var $maerke;
    var $hk;
    function Bil($farve,$maerke,$hk)
    {
        $this->farve=$farve;
        $this->maerke=$maerke;
        $this->hk=$hk;
    }
}

$_SESSION['biler']=array();
if($_REQUEST['test'] == "1"){
$_SESSION['biler'][]=new Bil('rød','Volvo',100);
$_SESSION['biler'][]=new Bil('blå','Toyota',115);
}
echo('Der er '.count($_SESSION['biler']).' biler:<br />');
foreach($_SESSION['biler'] as $bil)
{
    echo('En '.$bil->farve.' '.$bil->maerke.' med '.$bil->hk.'hk<br />');
}
?>
Avatar billede jonas82 Nybegynder
06. maj 2005 - 18:17 #5
Jeg har selvfølgelig også session_start() i toppen.
Avatar billede ksoren Nybegynder
06. maj 2005 - 18:39 #6
$_SESSION['biler']=array(); // nulstiller array

så hvis du laver en kontrol, og kun opretter arrayet hvis det ikke eksisterer..

if(!isset($_SESSION['biler'])) $_SESSION['biler']=array();
Avatar billede coderdk Praktikant
06. maj 2005 - 18:40 #7
Gem den class i en ekstern fil, og require den før du laver session_start()
Avatar billede xyborx Nybegynder
06. maj 2005 - 18:57 #8
Det må være noget med serialize() og unserialize():

<?php
class Bil
{
    var $farve;
    var $maerke;
    var $hk;
    function Bil($farve,$maerke,$hk)
    {
        $this->farve=$farve;
        $this->maerke=$maerke;
        $this->hk=$hk;
    }
}

// Checker om der i forvejen findes biler i sessionen
if(isset($_SESSION['biler']))
{
    // Hvis ja, træk dem ud
    $biler=unserialize($_SESSION['biler']);
}
else
{
    // Ellers opret et nyt array til dem
    $biler=array();
}
$biler[]=new Bil('rød','Volvo',100);
$biler[]=new Bil('blå','Toyota',115);

echo('Der er '.count($biler).' biler:<br />');
foreach($biler as $bil)
{
    echo('En '.$bil->farve.' '.$bil->maerke.' med '.$bil->hk.'hk<br />');
}

// Gem bilerne i sessionen
$_SESSION['biler']=serialize($biler);
?>
Avatar billede jonas82 Nybegynder
06. maj 2005 - 19:02 #9
Det var faktisk isset tjekket og så require klassen før session_start() - omvendt virkede ikke...sært ;-)

I skal alle have tusind tak for hjælpen. Jeg håber det er ok hvis jeg fordeler point med 20 til xyborx, 5 til coderdk og 5 til ksoren?
Avatar billede coderdk Praktikant
06. maj 2005 - 19:09 #10
Fint med mig :)
Avatar billede xyborx Nybegynder
06. maj 2005 - 19:31 #11
Det er bare i orden. Fortsat god dag :)
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