Kirjoittaja: Antti Laaksonen (2011).
Jos PHP-koodissa täytyy käsitellä paljon tietoa, yksi ratkaisu on ottaa käyttöön paljon muuttujia. Tämä ratkaisu on kuitenkin yleensä epäkäytännöllinen. Esimerkiksi jos käsiteltävänä on sata nimeä, muuttujat $nimi1
, $nimi2
, $nimi3
jne. olisivat hankalia.
Taulukon avulla voimme käsitellä suurta tietomäärää yhden muuttujanimen kautta. Esimerkiksi voimme tehdä taulukon $nimet
, joka voi sisältää minkä tahansa määrän nimiä. Nyt nimien käsittelyyn riittää samanlainen lyhyt koodi riippumatta nimien määrästä.
Seuraava koodi määrittelee taulukon $paivat
, joka sisältää viikonpäivien nimet:
<?php $paivat = array("maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"); ?>
Taulukon sisältö on nyt seuraava:
$paivat[0]
sisältää merkkijonon "maanantai"$paivat[1]
sisältää merkkijonon "tiistai"$paivat[2]
sisältää merkkijonon "keskiviikko"$paivat[3]
sisältää merkkijonon "torstai"$paivat[4]
sisältää merkkijonon "perjantai"$paivat[5]
sisältää merkkijonon "lauantai"$paivat[6]
sisältää merkkijonon "sunnuntai"Tässä tapauksessa taulukko sisältää seitsemän alkiota, joista jokainen on merkkijono. Jokaisella taulukon alkiolla on oma kohtansa taulukossa. Huomaa, että taulukon kohtien numerointi alkaa nollasta.
Voimme käyttää taulukon sisältöä esimerkiksi seuraavasti:
<?php $paivat = array("maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"); echo $paivat[3]; ?>
Koodin tulostus on seuraava:
torstai
Taulukon varsinainen etu verrattuna tavallisiin muuttujiin on, että hakasulkujen sisällä oleva alkion kohta voi olla muuttujan arvo. Esimerkiksi $paivat[$kohta]
viittaa kohdassa $kohta
olevaan alkioon taulukossa. Seuraavaksi näemme, mitä hyötyä tästä mahdollisuudesta on.
Voimme käydä taulukon läpi for-silmukalla seuraavasti:
<?php $paivat = array("maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"); for ($i = 0; $i < count($paivat); $i++) { echo $paivat[$i] . "<br>"; } ?>
Koodin tulostus on seuraava:
maanantai
tiistai
keskiviikko
torstai
perjantai
lauantai
sunnuntai
Tässä count($paivat)
tarkoittaa taulukon alkioiden määrää. Taulukossa on seitsemän alkiota, joten for-silmukka käy läpi taulukon kohdat 0–6. Koodi tulostaa jokaisen taulukon alkion omalle rivilleen.
Toinen mahdollisuus taulukon läpikäyntiin on foreach-silmukka:
<?php $paivat = array("maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"); foreach ($paivat as $paiva) { echo $paiva . "<br>"; } ?>
Koodin tulostus on sama kuin edellisessä koodissa. Tässä muuttuja $paiva
saa vuorollaan arvokseen kunkin taulukon alkioista. Jos taulukon alkioiden kohtia ei tarvita silmukassa, foreach-silmukka on luonteva valinta, koska se on yksinkertaisempi.
Taulukkoon voi lisätä sisältöä seuraavasti:
<?php $tiedot = array(); $tiedot[] = "apina"; $tiedot[] = "banaani"; $tiedot[] = "cembalo"; ?>
Tässä taulukko $tiedot
on aluksi tyhjä. Sitten siihen lisätään merkkijonot "apina", "banaani" ja "cembalo". Lopputuloksena taulukon sisältö on seuraava:
$tiedot[0]
sisältää merkkijonon "apina"$tiedot[1]
sisältää merkkijonon "banaani"$tiedot[2]
sisältää merkkijonon "cembalo"Taulukon alkioita voi muuttaa samaan tapaan kuin tavallisia muuttujia:
<?php $luvut = array(4, 2, 9, 8); $luvut[0] = 6; $luvut[2] = 1; ?>
Tämän koodin lopussa taulukon sisältö on seuraava:
$luvut[0]
sisältää luvun 6$luvut[1]
sisältää luvun 2$luvut[2]
sisältää luvun 1$luvut[3]
sisältää luvun 8Oletuksena taulukon ensimmäinen alkio on kohdassa 0, toinen alkio on kohdassa 1 jne. Usein on kuitenkin kätevää valita kohtien nimikointi itse. Tämä onnistuu seuraavasti taulukon määrittelyssä:
<?php $kaannos = array("yksi" => "one", "kaksi" => "two", "kolme" => "three"); ?>
Nyt taulukon sisältö on seuraava:
$kaannos["yksi"]
sisältää merkkijonon "one"$kaannos["kaksi"]
sisältää merkkijonon "two"$kaannos["kolme"]
sisältää merkkijonon "three"Seuraava koodi lisää vielä taulukkoon sanojen "viisi" ja "sata" käännökset ja tulostaa sitten sanan "kaksi" käännöksen ("two").
<?php $kaannos = array("yksi" => "one", "kaksi" => "two", "kolme" => "three"); $kaannos["viisi"] = "five"; $kaannos["sata"] = "hundred"; echo $kaannos["kaksi"]; ?>
Seuraava esimerkki tarjoaa käyttäjälle palvelun, jossa sanoja voi kääntää suomesta englanniksi:
<!DOCTYPE html> <html> <head> <title>Sanakirja</title> </head> <body> <form action="sanakirja.php" method="post"> Anna sana suomeksi: <input type="text" name="sana"> <br> <input type="submit" value="Käännä"> </form> </body> </html>
<?php $kaannos["nuori"] = "young"; $kaannos["vanha"] = "old"; $kaannos["mies"] = "man"; $kaannos["nainen"] = "woman"; $sana = $_POST["sana"]; if (isset($kaannos[$sana])) { echo "Käännös englanniksi: " . $kaannos[$sana]; } else { echo "Tuntematon sana!"; } ?>
Tässä isset
kertoo, onko tiettyä taulukon kohtaa olemassa.
Seuraava esimerkki jakaa käyttäjän antaman lauseen sanoihin.
<!DOCTYPE html> <html> <head> <title>Lauseen sanat</title> </head> <body> <form action="lauseensanat.php" method="post"> Anna lause: <input type="text" name="lause"> <br> <input type="submit" value="Lähetä"> </form> </body> </html>
<?php $lause = $_POST["lause"]; $sanat = explode(" ", $lause); $maara = count($sanat); echo "<p>Lauseessa on {$maara} sanaa:</p>"; echo "<ul>"; foreach ($sanat as $sana) { echo "<li>" . htmlspecialchars($sana); } echo "</ul>"; ?>
Koodissa on käytössä funktio explode
, joka jakaa merkkijonon osiin tietyn erotinmerkin perusteella ja palauttaa osat taulukkona. Tässä funktiolle annetaan erotinmerkiksi välilyönti, jolloin se jakaa lauseen sanoiksi.
Taulukon alkiona voi olla myös taulukko, minkä avulla voi luoda monimutkaisia taulukkorakenteita. Seuraavassa esimerkissä jokainen taulukon $kaupungit
alkioista on merkkijonoja sisältävä taulukko.
<?php $kaupungit["Suomi"] = array("Helsinki", "Turku", "Tampere"); $kaupungit["Ruotsi"] = array("Tukholma", "Göteborg", "Malmö"); $kaupungit["Norja"] = array("Oslo", "Bergen"); var_export($kaupungit); ?>
Koodin tulostus on seuraava:
array ( 'Suomi' => array ( 0 => 'Helsinki', 1 => 'Turku', 2 => 'Tampere', ), 'Ruotsi' => array ( 0 => 'Tukholma', 1 => 'Göteborg', 2 => 'Malmö', ), 'Norja' => array ( 0 => 'Oslo', 1 => 'Bergen', ), )
Komento var_export
on näppärä apuväline monimutkaisen taulukon sisällön tarkasteluun. Se tulostaa näkyviin taulukon koko sisällön puumaisena rakenteena.
Taulukoiden, $_POST ja $_GET debuggaukseen funktiosta print_r on paljon apua.
Jos lauseen sanojen laskennassa syöttää sanojen väliin ylimääräisiä välilyöntejä, muuttuu tulos oleellisesti.
Voitko lisätä tuohon muutaman esimerkin? Tuohon kaipaisin esimerkkiä, miten käydään tuollainen taulukko taulukossa silmukalla läpi (tai jopa kolmiulotteinen taulukko, jossa on erikokoisia taulukoita), tai assosiatiivisen taulukon läpikäynti niin, että vaikkapa tuosta esimerkkitaulukosta saadaan, missä maassa on Turku.
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.