Kirjautuminen

Haku

Tehtävät

Oppaat: PHP-ohjelmointi: Osa 5 - Taulukot

  1. Osa 1 - Johdanto
  2. Osa 2 - Muuttujat
  3. Osa 3 - if-rakenne
  4. Osa 4 - for-silmukka
  5. Osa 5 - Taulukot
  6. Osa 6 - Lomakkeet
  7. Osa 7 - Nettisivusto
  8. Osa 8 - Lisää silmukoista
  9. Osa 9 - Tiedostot
  10. Osa 10 - Omat funktiot
  11. Osa 11 - Istunnot
  12. Osa 12 - Tietokannat
  13. Osa 13 - Tietoturva
  14. Osa 14 - Olio-ohjelmointi
  15. Osa 15 - Kuvien luonti
  16. Osa 16 - Säännölliset lausekkeet
  17. Osa 17 - Merkistöt
  18. Osa 18 - PHP:n ongelmat

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ä.

Taulukon käyttäminen

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:

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.

Taulukon läpikäynti

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.

Taulukon muuttaminen

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:

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:

Oma nimikointi

Oletuksena 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:

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"];
?>

Esimerkki: Sanakirja

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!";
}
?>

Kokeile koodia

Tässä isset kertoo, onko tiettyä taulukon kohtaa olemassa.

Esimerkki: Lauseen sanat

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>";
?>

Kokeile koodia

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.

Taulukko taulukossa

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.


Kommentit

mm [23.09.2011 10:00:58]

#

Taulukoiden, $_POST ja $_GET debuggaukseen funktiosta print_r on paljon apua.

skydda [03.05.2012 19:04:10]

#

Jos lauseen sanojen laskennassa syöttää sanojen väliin ylimääräisiä välilyöntejä, muuttuu tulos oleellisesti.

mm [23.11.2012 14:42:20]

#

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.

Kirjoita kommentti

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.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta