php.jpgJohdatus PHP-kieleen

Sisällysluettelo

JohdantoSyntaksiTietotyypitMuuttujatOperaattoritKontrollirakenteetTaulukotFunktiotLomakkeetTietokantaEvästeetSessiot

www.php.net

Taulukot

Yleistä taulukoista ylös

Taulukko on PHP:ssä oikeastaan järjestetty "kartta" (ordered map). Kartta on rakenne, joka yhdistää arvot tiettyihin avaimiin. Oletuksena avain on kokonaislukuindeksi, joka on tuttu muista ohjelmointikielistä, kuten Javasta. Avaimen voi kuitenkin poikkeuksena Javaan PHP:ssä määrittää itse. Avain voi olla joko integer- tai string-tyyppinen.

Toisin kuin Javassa, taulukolle ei määritellä tietotyyppiä, eikä sen alkioiden sisältö ole rajoitettu samaan tietotyyppiin. Sama taulukko voi vapaasti sisältää esimerkiksi kokonaislukuja, merkkijonoja ja olioita. Taulukko voi myös sisältää toisia taulukoita, jolloin taulukoilla saadaan aikaan myös puurakenteita.

Taulukon määrittely ylös

Talulukko voidaan määritellä joko array()-rakenteella tai hakasulkeita käyttävällä syntaksilla. Seuraavassa on lyhyesti esitelty molemmat tavat.

array()

Array()-rakenteelle annetaan parametriksi pilkulla erotettuna haluttu määrä avaimia ja '=>'-merkeillä yhdistettynä niihin liittyviä arvoja. Avainta ei ole pakko määritellä. Oletuksena avaimeksi tulee kokonaislukuindeksi luvusta 0 alkaen. Alla on esimerkki array()-rakenteesta.

<?php
  $taulukko = array("eka" => 123
                    , 12 
                    , "merkkijono"
                    , "jokuvaan" => 2.345 );
  echo $taulukko["eka"]; //Tulostuu: 123
  echo $taulukko[0]; //Tulostuu 12
  echo $taulukko[1]; //Tulostuu: merkkijono
  echo $taulukko["jokuvaan"]; //Tulostuu: 2.345
?>

Esimerkissä ensimmäiselle ja viimeiselle alkiolle on määritelty avaimeksi merkkijono. Niille ei synny numeerista indeksiä, vaan niihin täytyy aina viitata määritellyn indeksin avulla. Toiselle ja kolmannelle alkiolle ei ole määritelty avainta, jolloin niiden avaimeksi tulee automaattisesti kokonaislukuindeksi nollasta alkaen. Siis avaimiksi tulee kokonaisluvut 0 ja 1. Jos avaimeksi jonkin alkion avaimeksi määritellään kokonaisluku, jatkuu indeksointi siitä kokonaisluvusta eteenpäin. Alla on esimerkki tästä.

<?php
  $taulukko = array("selitys" => "tekstiä" //avain: "selitys"
                    , 12                   //avain: 0
                    , 10 => "merkkijono"   //avain: 10				 
                    , "jokuluku" => 2.345  //avain: "jokuluku" 
                    , true );              //avain: 11
?>

Hakasulkusyntaksi

Taulukko voidaan luoda ilman array()-rakennetta asettamalla taulukkoon arvo seuraavalla tavalla.

<?php
  $taulukko[] = "jotain vaan";
?>

Jos "$taulukko"-nimistä muuttujaa ei ole olemassa, luodaan sijoituslauseessa automaattisesti uusi $taulukko-niminen taulukko. Jos taulukko on ennestään olemassa, lisätään siihen uusi alkio, jonka indeksiksi tulee seuraava vapaana oleva kokonaisluku. Samalla merkintätavalla voidaan myös määrittää taulukon alkioille avaimet.

<?php
  $taulukko["merkkijono1"] = "jotain vaan";
  $taulukko[10] = 345.4546;
?>

Taulukon läpikäyminen ylös

while- tai for-rakenne

Javassa tai C-kielessä on tapana käydä taulukko läpi while- tai for-rakenteessa indeksimuuttujan avulla. PHP:ssä voidaan käyttää samaa tapaa silloin, kun ollaan varmoja, että taulukon avaimet ovat oletusarvoja. Siis avaimien on oltava kokonaislukuja nollasta alkaen niin, että seuraava avain on aina edellinen luku lisättynä yhdellä. Alla on esimerkki tästä.

<?php
  $taulukko = array("jono", "toinen", "kolmas", "keksi", "itse", "lisää");
  for($i=0; $i<count($taulukko); $i++){
    echo $taulukko[$i];
  }
?>

Tässä esimerkissä tavallinen indeksointi toimii hyvin. Läpikäyminen ei enää toimi, jos taulukosta poistetaan joku solu tai, jos jollekin solulle annetaan oletusarvosta poikkeava avain. Huom! Esimerkissä käytetty count()-funktio palauttaa taulukon sisältämien solujen määrän.

foreach()

Silloin, kun taulukon avaimet eivät noudata oletusindeksointia, ei edellisen kohdan for- tai while-rakenne enää toimi taulukon läpikäymisessä. Tätä varten PHP:ssä on olemassa foreach-rakenne. Alla on esimerkki sen käytöstä

<?php
  $taulukko = array("jono", 45 => "toinen", "kolmas", "keksi", "itse", "lisää");
  foreach($taulukko as $arvo){
    echo $arvo;
  }
?>

Siis foreach on silmukkarakenne joka käy läpi kaikki parametrina annetun taulukon solut. Esimerkin ilmaisu '$taulukko as $arvo' tarkoittaa sitä, että jokaisella silmukan kierroksella $arvo nimiseen muuttujaan sijoitetaan käsittelyssä olevan taulukon solun arvo.

Taulukoiden vertailu ylös

Taulukoita voidaan vertailla tavallisilla vertailuoperaattoreilla. Alla on taulukko operaattoreiden merkityksistä. Esimerkeissä $a ja $b ovat siis taulukoita.

EsimerkkiSelitys
$a==$b$a ja $b sisältävät samat elementit (ovat samanlaiset)
$a===$b$a ja $b sisältävät samat elementit samassa järjestyksessä (ovat identtiset)
$a!=$b$a ja $b eivät ole samanlaiset
$a<>$bsama kuin edellä
$a!==$b$a ja $b eivät ole idenntiset

Hyödyllisiä funktioita ylös

unset()

unset()-funktiolla voidaan poistaa parametrina annettu solu taulukosta. Sen käytöstä on huomattava, että taulukko ei indeksoidu automaattisesti jonkun solun poiston jälkeen. Jos esimerkiksi taulukossa olevien solujen avaimet ovat oletukset mukaisesti 0, 1 ja 2 ja niistä keskimmäinen solu poistetaan, on jäljelle jäävien solujen avaimet edelleen 0 ja 2.

count()

count()-funktio palauttaa parametrina annetun taulukon solujen määrän.