Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

Arrays fra bunden


Arrays er en meget populær ting hvad angår opbevaring af værdier. I stedet for at sidde og rode med 10-20 forskellige variabler, kan du bruge et array.

For eventuelle nybegynderes skyld, starter vi helt fra bunden. De mere øvede kan springe denne del over, hvis de vil, men den kan være meget god lige at få med alligevel. For at springe lige på og hårdt, laver vi et meget simpelt eksempel.

  1. <?php
  2. $navne = array(”Hans”, ”Peter”, ”Torben”);
  3. ?>

9 ud af 10 gange bruger man en variabel til at holde på arrayet. Det gør man bl. a. for senere hen at kunne udskrive dets værdier individuelt. Hvis du allerede finder syntaksen uoverskuelig på dette tidspunkt, er det tid til at gribe fat i den filosofiske ende. En god vinkel at se tingene fra er: Et array har faktisk samme syntaks som en almindelig PHP funktion. Det er bare dig, der bestemmer funktionens parametre – og det gør du ved at tildele arrayet værdier. Du har nok set en funktion med flere parametre før i tiden. Hver parameters værdi er adskilt af et komma, ligesom i vores array. Vores funktion hedder dermed ’array’, og tager 3 parametre: Hans, Peter og Torben (:

Det var en rimelig lang forklaring, og jeg håber lidt mindre vil kunne gøre det senere, men vi tager det som sagt fra bunden.

Det er ikke nok bare at have et array med nogle værdier, hvis vi ikke kan udskrive værdierne senere. Det er som en colaflaske uden cola i, og det kan man jo ikke bruge til meget, udover at score panten og købe nogle tyggegummier i stedet. Men da værdier i PHP er mere værd end tyggegummier, vil jeg her give et eksempel på at udskrive en værdi i et array.

  1. <?php
  2. $navne = array(”Hans”, ”Peter”, ”Torben”);
  3. echo $navne[1];
  4. ?>

Prøv lige selv at spekulere lidt over det eksempel, jeg lige gav, inden du læser videre. Vi har 3 værdier i vores array, og hvis du har bare lidt mellem ørerne, kan du regne ud, at vi vil udskrive værdi nummer 1 i arrayet $navne. Så må vores output være navn nummer 1, altså Hans. Det er logik. Men det er desværre ikke rigtigt. Vores output bliver Peter, og for at du ikke besvimer af fortvivlelse over denne kæmpe uregelmæssighed, må du hellere få en forklaring.

PHP starter med at tælle værdierne i et array ved 0. For at give en hurtig forklaring, så er Hans lig med 0. Dermed er Peter lig med 1, og Torben 2. Det går derfor heller ikke, at du skriver $navne[3] – for så skulle vores array have 4 værdier, og det har det som bekendt ikke. Det er et faktum, vi ikke kan gøre noget ved, så vi springer videre nu.

Nogle gange har man faktisk ikke helt styr på, hvilke og hvor mange værdier, der befinder sig i ens array. Det kunne f. eks. være i forbindelse med et database udtræk, eller en længere række tal. For at få bare lidt overblik, er det dejligt at kunne tilføje sine egne værdier til et array. Det gøres på følgende måde:

  1. <?php
  2. $navne = array(”Hans”, ”Peter”, ”Torben”);
  3. $navne[] = ”Knud”;
  4. echo $navne[3];
  5. ?>

Nu kan vi godt tillade os at skrive $navne[3], for nu har vi 4 værdier i vores array. Den fjerde har vi nemlig lige selv tilføjet, og den går af navnet ’Knud’. Den første linie ved du hvad går ud på. Det er bare vores array. Det nye kommer først i anden linie.

  • $navne[] = ”Knud”;

Det her kræver måske lidt længere forklaring end som så. Der er nogle der siger, der er 2 måder at lave et array på. Den anden skulle være på følgende måde:

  1. $navne[] = ”Hans”;
  2. $navne[] = ”Peter”;
  3. $navne[] = ”Torben”;

Det er faktisk en forkert måde at sige det på. Det, vi lige har gjort, var at tilføje 3 værdier til arrayet $navne. Man kan så sige, at hvis man ikke har oprettet det array i forvejen, bliver det automatisk oprettet første gang vi giver det en værdi, men teknisk set bliver vi bare ved med at give det værdier. Og det er også det, vi har gjort i eksemplet før, hvor vi tilføjede navnet ’Knud’. Der havde vi bare vores array i forvejen. En måde at dokumentere det på er, at man ikke kan vende processen om. Du kan f. eks. ikke gøre følgende, medmindre du ønsker en fejl:

  1. <?php
  2. $navne[] = ”Knud”;
  3. $navne = array(”Hans”, ”Peter”, ”Torben”);
  4. ?>

Først giver vi værdien til et array, der ikke eksisterer, hvorefter vi opretter det ikkeeksisterende array. Det giver jo sådan set heller ikke mening. Men du kan derimod godt oprette 2 arrays med samme navn, altså som bliver holdt af samme variabel:

  1. <?php
  2. $navne = array(”Hans”, ”Peter”, ”Torben”);
  3. $navne = array(”Hans”, ”Peter”, ”Torben”);
  4. echo $navne[1];
  5. ?>

Det eneste der sker er, at du spilder tiden. Efter at have oprettet det første array, overskriver du det med et andet array, med præcis de samme værdier.

Men indtil videre har vi kun holdt os på børnestadiet. Selv arrays kan blive ret så indviklede, og så gælder det jo bare om at kunne vikle dem ud igen. Du har måske hørt om operatorer. Så synes jeg lige du skal kigge på denne operator:

  • =>

Hvis du er forholdsvis ny indenfor PHP, tænker du muligvis noget i stil med ”Større end eller lig med”. Men nej, den operator ser sådan her ud:

  • >=

Nu er det så meningen du skal tænke ”Det er sgu da det samme. Rækkefølgen kan vel være lige meget?”, for så kan jeg nemlig håne dig lidt (; De to operatorer har intet med hinanden at gøre. Den ene bruges til at tilføje værdier, den anden til at checke værdier. Nu skal vi have et array med de samme 3 herrer som tidligere, men denne gang skal vi også have deres alder.

  1. <?php
  2. $navne = array(”Hans” => 52, ”Peter” => 38, ”Torben” => 117);
  3. ?>

Det kaldes et ’associeret array’. Jeg kan ikke rigtigt forklare hvorfor, for jeg aner ikke hvad ’associeret’ betyder, men det kan jo være, du er klogere end mig på det punkt. Hvis du har læst alt indtil videre, burde det eneste forklaringskrævende være syntaksen, men det burde heller ikke være skide svært at regne ud. Du kan oversætte ’=>’ med det danske ord ’Tildeles’. Så prøver vi lige med endnu et eksempel:

  1. <?php
  2. $navne = array(”Hans” => 52, ”Peter” => 38, ”Torben” => 117);
  3. echo $navne[1];
  4. ?>

Hvis du afprøver denne kode vil du opdage, du får en fejl. Du har nemlig selv dannet indekset for dit array, og det kræver også lidt videre forklaring: Et array består af 2 elementer: En nøgle og en værdi. Hvis der ikke er nogen værdi, bliver værdien lig nøglen, og nøglen bliver så et tal, ligesom vi fandt ud af før. Dette lyder måske totalt sort, men det er egentlig meget simpelt. ’Hans’ er nøglen, og ’52’ er værdien. Det kan også forklares på denne måde:

  1. <?php
  2. $navne = array(Nøgle => Værdi);
  3. echo $navne[Nøgle];
  4. ?>

Når du kalder en værdi i et array, skal du skrive variablen, der holder arrayet, og nøglen på den værdi, du vil have fat i, i et firkantparentes. Nu hvor vi fik det opklaret, vil det måske lyde mindre sort for dig, så jeg tager den igen: Hvis der ikke er tildelt nogen værdi til en nøgle i et array, bliver værdien sat lig nøglen, og nøglen bliver sat til et tal mellem 0 og X. Men vi har endnu ikke rigtigt set det praktiske i et array.

Arrays er langt mere raffinerede i forbindelse med enten løkker eller funktioner. Dem vil jeg til gengæld ikke forklare, da det er ikke er dem, artiklen omhandler.

  1. <?php
  2. $navne = array(”Hans”, ”Peter”, ”Torben”);
  3. $start = 0;
  4. while ($start++ < count($navne)) {
  5.   echo $navne[$start];
  6. }
  7. ?>

Ovenstående eksempel vil udskrive: HansPeterTorben. Vi kører altså hele arrayet igennem med en løkke. Her må du selv tænke over hvad der sker, for vi kommer aldrig videre hvis jeg skal skære alt 100% ud i pap, men et forslag er, at du slår count() op i PHP’s manual. Der findes dog en løkke der er direkte lavet til arrays. Den hedder foreach():

  1. <?php
  2. $navne = array(”Hans”, ”Peter”, ”Torben”);
  3. foreach ($navne as $nøgle) {
  4.   echo $nøgle;
  5. }
  6. ?>

Ovenstående vil give præcis samme output som forrige eksempel. Foreach vil jeg heller ikke give nogen forklaring, igen vil jeg henvise til manualen. Hvis vi vil have begge elementer i et array ud med foreach gør vi sådan her:

  1. <?php
  2. $navne = array(”Hans” => 52, ”Peter” => 38, ”Torben” => 117);
  3. foreach ($navne as $nøgle => $værdi) {
  4.   echo ”Nøglen $nøgle indeholder værdien $værdi”;
  5. }
  6. ?>

Det sidste begreb jeg vil gennemgå er bare nogle nyttige funktioner. Dem vil jeg ikke forklare på nogen måde, for så bliver denne artikel en ren bibel. Det eneste jeg kan sige er, at funktionerne ændrer på arrayet på den ene eller anden måde, så kan du selv rode med outputtet.

  1. <?php
  2. $navne = array(”Hans” => 52, ”Peter” => 38, ”Torben” => 117, ”Hans” => 52);
  3. $navne = array_unique($navne); // Fjerner flere af samme nøgler (så det kun er en ’Hans’)
  4. sort($navne); // Sorterer $navne efter $nøgle i alfabetisk orden
  5. $navne[”Knud”] = 8; // Vi tilføjer nøglen ’Knud’ med værdien ’8’
  6. $antal = count($navne); // Vi sætter variablen ’$antal’ lig antallet af værdier i arrayet ’$navne’
  7. echo ”<p>Der er $antal værdier i arrayet $navne. Og de er:</p>”;
  8. foreach ($navne as $nøgle => $værdi) {
  9.   echo ”Nøglen $nøgle indeholder værdien $værdi” . ”<br>”;
  10. }
  11. ?>

Mere har jeg ikke om arrays, men det var vist også en hel del. Jeg vil dog lige afslutte med en kort information om brug af count(). Funktionen starter ikke fra 0 ligesom et array, den har nemlig ikke noget med nøgler at gøre, den tæller dem bare. Den vil altså derfor udskrive et tal højere, end den højeste nøgle i et array, hvis nøglerne ikke har nogle værdier. Derfor bruges operatoren ’<’, så løkken stopper når den når højeste nøgle.

Håber den kunne bruges (:
Oprettet af:

PHP

Point modtaget: 0

Rate:
22:19 29/04/2006

Kommentarer

Giv din mening tilkende om denne artikel, eller læs andres.
Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
Wow, det var sq guf for mig, der stort set lige er startet på PHP.

Der er ikke andet at sige end:
5 herfra!

Håber på mere i den stil og kvalitet
Oprettet af:
  Mail
22:37 29/04/2006
God artikel,
eller ved ikke hvis den er god da jeg ikke koder php, men det ser ud til at du forklarer alt rigtigt godt.

Dog vil jeg sige at en artikel aldrig bliver for lang. ;)
("Dem vil jeg ikke forklare på nogen måde, for så bliver denne artikel en ren bibel.")
Oprettet af:
  Mail
08:45 30/04/2006
Kan godt se hvad du mener v0id ;) Men så ville jeg først være færdig en gang ved midnat I) hehe
Oprettet af:
  Mail
10:05 30/04/2006
Hehe
Oprettet af:
  Mail
10:27 30/04/2006
Nu har jeg kun skimmet artiklen igennem (jeg kommer nok med en updatet kommentar senere).
Men jeg synes du forklarer rigtigt godt - skulle lige til at fornærme dig da du sagde at $array[1] ville udskrive det første i arrayes - indtil jeg læse videre :)

#Void: En artikel kan sagtens blive for lang - hvis man ikke kender noget til PHP og arrays - så skal man have en chance for at bruge det grundlæggende i praksis inden man går mere ud i det helt avancerede.
Oprettet af:
  Mail
11:32 30/04/2006
Webstuff --> Så er jeg glad for du læste videre :) Synes også en artikel kan blive for lang men så sandelig også for kort
Oprettet af:
  Mail
12:40 30/04/2006
Er jeg så ikke enig i.
Synes man skal skrive alt det man overhovedet kan indenfor et emne, og hvis læseren så synes at det er for svært, kan læseren stoppe og prøve sig frem indtil han forstår, og så gå videre.
Oprettet af:
  Mail
12:28 01/05/2006
For tæt opstilling (: ellers god
Oprettet af:
  Mail
19:26 20/05/2006
Uhh god artikel.
Jeg kom i hvert fald lidt længere på den her artikel!!
Oprettet af:
  Mail
16:23 12/08/2006
Dejlig artikel.

Men man skal have fat i alle PHP udtryk før det her.
Det er ikke for nogen der slet ikk har forstand på det.

<b>4/5</b>
Oprettet af:
  Mail
19:30 01/01/2007
Du skal være oprettet og logget ind for at kommentere en artikel
Copyright © Rowl.dk v/ Michael Raagaard | 2005-12 | Alle rettigheder forbeholdes