Sähköisten asiointipalveluiden toteuttaminen

Sorakuilu

Taulukot

Taulukot ovat joukko muuttujia. Taulukossa jokaisella jäsenellä eli alkiolla on indeksi, joka on numero tai nimi(avain).

Jos indeksi on nimi, käytetään taulukosta nimeä assosiatiivinen taulukko.

Taulukkoa käytetään usein tilanteessa, jossa luetteloa muuttujista voisi pääosin käsitellä kokonaisuutena ja olisi vaikea antaa jokaiselle muuttujalle oma nimi, esim lista nimiä($nimi1,$nimi2,$nimi3,$nimi4....).

Yksiulotteinen taulukko on rivi muuttujia. Moniulotteisen taulukon alkio voi sisältää toisen taulukon.

Perinteinen taulukko

Taulukon luonti eri tavoilla

Taulukko luodaan sanalla array, seuraavassa yksiulotteisen taulukon luomistapoja

Esimerkki

Luo taulukko kirjoittamalla arvot

$nimilista = array("Joose","Juuso","Josef","Juha","Jussi"); $t = array("yksi","kaksi","kolme");

Taulukko voidaan myös luoda luomalla alkiot jokainen erikseen

$nimilista[0] = "Joose"; $nimilista[1] = "Juuso"; $nimilista[2] = "Josef"; $nimilista[3] = "Juha"; $nimilista[4] = "Jussi";

Hakasulkujen sisällä oleva luku on alkion indeksi. Indeksit alkavat aina luvusta 0, siis taulukon ensimmäisen alkion indeksi on 0, toisen 1 kolmannen 2 ja viimeisen n-1 (n on alkioiden lukumäärä).

Numerointi ei ole välttämätöntä, taulukon luonnin voi myös tehdä seuraavasti:

$nimilista[] = "Joose"; $nimilista[] = "Juuso"; $nimilista[] = "Josef"; $nimilista[] = "Juha"; $nimilista[] = "Jussi";

Taulukosta lukeminen

Yhteen taulukon alkioon voi viitata kirjoittamalla taulukon nimen ja hakasulkujen sisään joko alkion indeksin tai avaimen.

echo $nimilista[0];

Lause tulostaa sanan Joose

Kaikki taulukon alkiot peräkkäin voi lukea for-lauseella (tämä lause toimii kaikissa ohjelmointikielissä samalla tavalla).

Esimerkkitaulukossa on 5 alkiota eli $pituus on arvoltaan 5.

for ($i=0;$i<$pituus;$i++)< { echo $nimilista[$i]; }

Assosiatiivinen taulukko

Assosiatiivisessa taulukossa indeksin tilalla on alkion nimi, se on järjestetty hakemisto, jossa taulukon sisältämiin arvoihin viitataan avaimen avulla.

Assosiatiivisen taulukon luominen

Assosiatiivisen taulukon voi luoda PHP:hen sisäänrakennetulla funktiolla array.

$t = array("keksi", "kakku", "piirakka"); $u = array("mn" => "Matti Nieminen", "vt" => "Viljo Tarpeinen", "us" => "Usko Suutari");

$t = array("avain1" => 1234,"avain2" => 2345);

Esimerkki viittaus $taulukko[avain]

$t["viite"] = "Anna"; $t["viittaus"] = "Leevi"; $t["avain"] = "Uolevi";

Esimerkissä luodaan muuttujaan $t taulukko, johon lisätään kolme merkkijonoa avaimille "viite", "viittaus" ja "avain".

Esimerkki taulukosta

taulukko

Yllä olevassa kuvassa on henkilötiedot sisältävä taulukko (annetaan sille nimeksi $henkilo). Siinä on näytetty indeksoinnin vaihtoehdot: joko alkioiden indeksit (numerot 0:sta eteenpäin) tai jokaisen alkion assosiatiivinen nimi. Alkioon viitataan siis taulukosta riippuen kahdella tavalla:

  1. Käytä indeksiä hyväksesi, eli $enimi = $henkilo[3];
  2. Käytä assosiatiivista nimeä hyväksesi , eli $enimi = $henkilo["etunimi"];

$_POST ja $_GET

Huomaat ylläolevasta, että taulukko on tuttu asia - kaikki ns. superglobaalit muuttuja (esim lomakkeesta postattu $_POST ja kysymysmerkkijono $_GET) ovat taulukkomuodossa ja niihin voidaan viitata molemmilla ylläolevilla tavoilla. Niidenkin avaimet ovat ohjelmoijan määrittelemiä, esim. $_POST-taulukkomuuttujan alkiot saavat lomakkeen kenttien nimet avaimikseen ja käyttäjän syötteet alkioiden arvoiksi- $_GET-taulukkomuuttujaan taas saadaan alkioiden avaimet (ja arvot) http-pyynnän kysymysmerkkijonosta.

foreach-rakenne

PHP:ssä käytetään foreach-toistorakennetta, joka toimii, vaikka taulukon alkioiden lukumäärää ei tiedetä.

foreach ($taulukko as $arvo) lause;

Tässä luodaan kaksi uutta taulukkoa $t ja $u, joista ensimmäisen alkioita indeksoidaan luvuilla 0, 1 ja 2 ja jälkimmäisen indekseinä ovat merkkijonot "mn", "vt" ja "us".

Jos taulukon avaimina käytetään merkkijonoja, pitää hakasulkujen sisälle merkkijonon ympärille kirjoittaa aina lainausmerkit paitsi silloin, kun viittaus tapahtuu merkkijono sisällä:

echo "Hepun nimi on $u[us]."; ?> tulostaa näkyville seuraavan tekstin "Hepun nimi on Usko Suutari."

Assosiatiivisen taulukon läpikäynti

foreach-rakenne mahdollistaa helpon tavan taulukon läpikäyntiin:

foreach ($taulukko as $avain => $arvo) lause

Lause käy läpi taulukon alusta loppuun ja suorittaa jokaisen alkion kohdalla lauseen, jossa voi viitata taulukon alkioon muuttujilla $avain ja $arvo.

Tässä esimerkissä luodaan ja käydään läpi sekä tavallista indeksiä että avainta käyttävät taulukot:

$t = array("nolla", "yksi", "kaksi"); $u = array("hedelmä" => "omena", "vilja" => "ruis", "marja" => "vadelma"); foreach ($t as $arvo) echo "$arvo<br>"; echo "--------<br>"; foreach ($t as $avain => $arvo) echo "$avain -> $arvo<br>"; echo "--------<br>"; foreach ($u as $arvo) echo "$arvo<br>"; echo "--------<br>"; foreach ($u as $avain => $arvo) echo "$avain -> $arvo<br>"; ?>

tulostaa rivit

nolla yksi kaksi -------- 0 -> nolla 1 -> yksi 2 -> kaksi -------- omena ruis vadelma -------- hedelmä -> omena vilja -> ruis marja -> vadelma

Suoritusjärjestyksen kontrollointi

Toistolauseiden (ja esimerkiksi valintalauseen) suoritusjärjestystä voi ohjata lauseilla break, continue ja return. Näistä viimeistä käytetään funktioiden suorituksen keskeyttämisessä.

Lause break keskeyttää lauseen suorituksen.

Etsintä edellisen esimerkin taulukosta $u: $loytyy = ""; foreach ($u as $avain => $arvo) { if ($arvo == "ruis") { $loytyy = $avain; break; } } if ($loytyy) echo "\"ruis\" löytyy avaimen arvolla \"$loytyy\"!"; else echo "Ei löydy!"; ?>

Edellinen koodi tulostaa sivulle:
"ruis" löytyy avaimen arvolla "vilja"!

Lause continue keskeyttää toistolauseen yhden kierroksen suorituksen ja jatkaa seuraavalle toistokierrokselle.

Taulukkofunktioita

PHPssa on sisäänrakennettuja funktioita (aliohjelmia), jotka helpottavat taulukoiden käyttöä.

sizeof($taulukko)

funktio saa syötteekseen - sulkujen sisälle - taulukon nimen ja palauttaa alkioiden lukumäärän

$nimilkm = sizeof($nimilista);

Vastaava on myös funktio count - se voi käyttää syötteenään taulukkoa tai olion ominaisuuksia.

sort, rsort

Lajittelee taulukon arvojen mukaan alhaalta ylöspäin (rsort toisinpäin)

sort($nimilista);
print_r (sort($imilista)); //tulostaa taulukon sisällön kokonaan

in_array

Tämä funktio tarkistaa, onko syötteen 1. muuttuja sisällä taulukossa (toinen muuttuja).

if(in_array($haettava,$taulukko)) echo "Löytyi!";

Funktioita kaikkien muuttujien käsittelyyn

unset

Hävittää muuttujan

unset($nimilista["eka"]);

isset

Tarkistaa, onko muuttuja olemassa:

if (isset($nimilista["eka"])) echo "OK";

print_r

Tulostaa selkokielisenä muuttujan sisällön

$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);