Perjantai, 24.11.2017    
Jorkki.com

Artikkelit
   » Etusivu
   » Palaute


logo
  Artikkelit » PHP-opas

1. Alkuun
2. Ehtolause
3. Lomakkeiden käsittely
4. Tiedoston sisällyttäminen
5. Silmukat
6. Taulukot
7. Tiedostojen käsittely
8. Superglobaalit muuttujat
9. Päätäntö ja FAQ




Taulukot

Taulukot ovat erittän hyvä tapa tallentaa tietoa väliaikaisesti skriptissä. Helpoiten taulukotkin selitetään esimerkin avulla.

Taulukko

Esimerkki 10
(taulukko.php)
<?php
$nimet = array ("Ville", "Matti", "Teppo", "Sami", "Joonas");
print $nimet[0];
print "<br>";
print $nimet[1];
print "<br>";
print $nimet[3];
?>

Tulostus:
Ville
Matti
Sami

  • Rivillä 2 teemme taulukon array()-funktiolla ja tallennamme taulukon muuttujaan $nimet. Array() ottaa argumentikseen taulukkoon tallennettavat merkkijonot, eli Ville, Matti, Teppo, Sami ja Joonas.
  • Taulukosta tulostetaan tietoa seuraavalla tavalla: $muuttujan_nimi[indeksinumero].
  • Taulukot ovat siinä mielessä "järjen vastaisia", että indeksointi alkaa numerosta 0.
  • Koska indeksointi alkaa numerosta nolla, on Ville indeksinumero 0, Matin 1, Tepon 2 jne.
  • $nimet[0] tulostaa siis Villen, koska Ville on taulukon ensimmäinen alkio.
  • Loppu pitäisi olla selvää.



Nyt vähän monimutkaisempi esimerkki, jossa käytämme jaksossa 5 opittua silmukkaa. Tiedot kaappaamme nyt ensimmäistä kertaa tietokannasta. Tietokantana käytetään tekstitiedostoa. Voi olla, että osalle asia avautuu heti, mutta joillekin asia taas on vaikea. Yritän selittää toiminnan mahdollisimman tarkasti.
Tietokanta on paikka, johon tietoa voidaan tallentaa pysyvästi niin, että se ei tuhoudu, kun skriptin ajo lopetetaan.

Esimerkki 11
1/2
(tietokanta.txt)
Ville-Matti-Teppo-Sami-Joonas

Esimerkki 11
2/2
(taulukko2.php)
<?php
$tietokanta = file("tietokanta.txt");
$nimi = explode ("-", $tietokanta[0]);
$maara = count($nimi);
$maara = $maara - 1;
$i = 0;
while ( $i <= $maara )
{
print $nimi[$i];
print "
";
$i++;
}
?>

Tulostus:
Ville
Matti
Teppo
Sami
Joonas

  • Rivillä 2 käytämme file()-funktiota jakamaan tiedoston tietokanta.txt rivit taulukoiksi. File() ottaa siis argumentikseen tiedoston nimen, joka pitää jakaa taulukoksi. Eli nyt $tietokanta[0] on tiedoston tietokanta.txt ensimmäinen rivi, $tietokanta[1] toinen rivi jne. Koska tiedostossa on vain yhdellä rivillä tietoa, tarvitsemme vain tuota $tietokanta[0]-muuttujaa.
  • Rivillä 3 käytämme explode()-funktiota jakamaan tietokanta.txt:n ensimmäisen rivin taulukoksi. Ensimmäinen rivi on siis nyt taulukossa $tietokanta[0]. Explode() ottaa argumentikseen merkin, jonka perusteella data jaetaan taulukoiksi ja muuttujan, joka sisältää dataa. Eli explode("-" $tietokanta[0]) erottelee muuttujassa $tietokanta[0] olevat merkkijonot väliviivan perusteella. $tietokanta[0] sisältää nyt siis tiedostossa tietokanta.txt olevan datan, eli Ville-Matti-Teppo-Sami-Joonas. $nimi[0] on nyt siis Ville, $nimi[1] on Matti, $nimi[2] on Teppo jne. Nyt jos haluamme tulostaa nuo nimet, voisimme tulostaa ne normaalisti print-funtkiolla, eli print $nimi[0] $nimi[1] jne. kunnes viimeinen nimi saavutetaan. Entä jos emme tiedä, kuinka paljon nimiä tietokannassa on? Tai jos nimiä on esimerkiksi 1000, on turhauttavaa kirjoittaa 1000 kertaa lähes sama lause ja lisäksi, jos se jouduttaisiin kirjoittamaan 1000 kertaa, tulisi ohjelmasta nopeasti hyvinkin iso. Onneksi voimme käyttää tähän silmukkaa.
  • Ennen kuin käytämme silmukkaa, lasketaan kuinka monta nimeä taulukko $nimet sisältää. Se tehdään count()-funktiolla, joka ottaa argumentikseen taulukon nimen. Count() laskee siis alkioiden määrän, mutta koska alkioiden indeksointi alkaa nollasta, pitää tuloksesta vähentää yksi, jotta skripti toimisi oikein.
  • Nyt kaikki on valmista tulostamista varten. Ensin alustamme muuttujan $i arvolla 0, koska taulukon alkioiden indeksointi alkaa nollasta (varmaan 10. kerta kun sanon, mutta tämä on tarkeä asia). Sitten käytämme silmukkaa tulostamiseen. Ensin testaamme, onko muuttuja $i pienempi tai yhtäsuuri, kuin muuttuja $maara, joka sisältää siis taulukon viimeisen alkion indeksinumeron. Jos lause while ( $i <= $maara ) on tosi, tulostetaan koodi. Lause print $nimi[$i]; tulostaa ensimmäisellä kerralla Villen, toisella Matin jne. Muuttujan $i arvoa kasvatetaan silmukan lopussa yhdellä ja jos lause on edelleen tosi, tulostetaan taas uusi nimi.
  • Toivottavasti ainakin osa sai selvää, miten skripti toimii. Nyt voit kokeilla lisätä tai vähentää nimiä, niin huomaat, että kaikki nimet tulostuvat aina, koska skripti on järkevästi tehty, eli se ei tue ainoastaan yhtä nimimäärää. Jokainen skripti tulisi suunnitella tällä tavalla, koska silloin onnistuu saman koodinpätkän käyttäminen uudessa tilanteessa.
  • Tämän esimerkin tarkoitus oli lähinnä näyttää tuon explode()-funktion käyttöä, joka on erittäin käytännöllinen. Esimerkissä nimet eroteltiin väliviivalla, mutta siihen voi käyttää myös mitä tahansa muutakin merkkiä. Oikeastaan jonkun muun merkin käyttö olisi järkevämpää, koska jonkun nimeen saattaa sisältyä väliviiva, ja tällöin skripti toimisi väärin.


Seuraava luku




© JC Web Productions