Kirjautuminen

Haku

Tehtävät

Opasarkisto: PHP 4 -opas: Osa 2 - Muuttujat ja taulukot

  1. Osa 1 - Johdanto
  2. Osa 2 - Muuttujat ja taulukot
  3. Osa 3 - Komentorakenteet
  4. Osa 4 - PHP ja Internet-sivut
  5. Osa 5 - Tiedostojen käsittely
  6. Osa 6 - Funktiot
  7. Osa 7 - Evästeet ja istunnot
  8. Osa 8 - Tietokannat (MySQL)
  9. Osa 9 - Vinkkejä ja vihjeitä

Kirjoittaja: Antti Laaksonen (2003).

⚠ Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi. ⚠


Tässä PHP-oppaan toisessa osassa perehdymme muuttujiin ja taulukoihin. Muuttujia tarvitaan lähes jokaisessa PHP-skriptissä; ne sisältävät erityyppistä skriptin suorituksessa tarvittavaa tietoa. Muuttuja auto voisi sisältää auton merkin ja vuosi sen ostovuoden. Taulukot taas sisältävät monta samankaltaista muuttujaa yhdessä, kuten parkkitalon kaikki autot.

Muuttujien merkintä ja tyypit

Jos olet ohjelmoinut aiemmin jollain muulla kielellä, olet varmaan tottunut määrittelemään muuttujat ennen niiden käyttöä. PHP:ssä tämä ei kuitenkaan ole tarpeellista: muuttujat ovat automaattisesti käytössä siitä lähtien, kun niihin viitataan koodissa.

Muuttujat erotetaan muusta koodista laittamalla dollarimerkki niiden nimien eteen. Muuttujanimi voi sisältää isoja ja pieniä kirjaimia, numeroita ja alaviivoja. Se ei kuitenkaan voi alkaa numerolla. Isot ja pienet kirjaimet tarkoittavat eri asiaa, eli $kirja ja $Kirja viittaavat eri muuttujiin.

Muuttujalle ei myöskään tarvitse määritellä tyyppiä, vaan se mukautuu kaikkiin tarkoituksiin sen mukaan, minkälaista tietoa sille annetaan. PHP:n tärkeimmät muuttujatyypit ovat:

Merkkijono on tekstiä sisältävä muuttuja. Koodissa merkkijonot ympäröidään joko lainaus- tai heittomerkeillä. Jos käytetään lainausmerkkejä, käytössä on seuraavat erikoismerkinnät:

merkintätarkoitus
\\kenoviiva (\)
\$dollarimerkki ($)
\"lainausmerkki (")
\nrivinsiirto (ASCII 10)
\rrivinvaihto (ASCII 13)
\tsarkain, tabulaattori (ASCII 9)

Luvut kirjoitetaan sellaisenaan, desimaalipilkun merkki on piste. Boolean-muuttujia käytetään sellaisiin tarkoituksiin, joissa muuttujalla on vain kaksi arvoa: tosi (true) tai epätosi (false).

Sijoituslause

Muuttujan arvo asetetaan sijoituslauseella, mikä tapahtuu PHP:ssä yhtäsuuruusmerkin avulla. Seuraavassa on muutamia esimerkkejä sijoituslauseista eri muuttujatyypeillä:

<?php
//merkkijonoja
$testi = "merkkijono";
$nimi = "Kalle \"Kake\" Virtanen";
$hakemisto = "c:\\php\\";

//kokonaislukuja
$kerros = 5;
$ika = 33;
$vuosi = 2003;

//liukulukuja
$pituus = 1.72;
$korko = 122.25;
$pii = 3.14159;

//boolean-arvoja
$tarkistus = true;
$virhe = false;
?>

Muuttujien tulostaminen

Muuttujia voidaan tulostaa samaan tapaan kuin tekstiä echo- ja print-komennoilla. Jos tulostettava teksti on ympäröity lainausmerkeillä, sen sisään voi laittaa suoraan muuttujanimiä. Muuttujanimen voi erottaa muusta tekstistä aaltosuluilla, mikäli se on vaarassa sekoittua muuhun tekstiin.

<?php
//tulostetaan pienet kirjaimet a-z ja numerot 1-9
$kirjaimet = "abcdefghijklmnopqrstuvwxyz";
$numerot = 123456789;

echo $kirjaimet;
echo " ";
echo $numerot;
?>
<?php
//tulostetaan Pekan asuinpaikka ja ikä
$nimi = "Pekka";
$kaupunki = "Hämeenlinna";
$ika = 55;

echo "$nimi asuu {$kaupunki}ssa ja on $ika vuotta vanha.";
?>

Muuttujien yhdistäminen

Muuttujien yhdistämiseen käytetään pistettä. Myös lukumuuttujia käsitellään merkkijonoina, jolloin 5 . 2 on 52, ei 7.

<?php
//muodostetaan sanoista "esi" ja "merkki" sana "esimerkki"
$alku = "esi";
$loppu = "merkki";
$sana = $alku . $loppu;
echo $sana;
?>
<?php
//muodostetaan luvusta 10 ja sanasta "vuotias" sana "10-vuotias"
$ika = 10;
$paate = "vuotias";
$sana = $ika . "-" . $paate;
echo $sana;
?>

Laskutoimitukset

Lukujen tai muuttujien väliset laskutoimitukset merkitään tuttujen merkkien avulla: yhteen- (+), vähennys- (-), kerto- (*) ja jakolasku (/). Lisäksi jakojäännös merkitään %. Laskujärjestystä voi myös muuttaa suluilla.

<?php
//esimerkkejä laskutoimituksista

$yhteen1 = 1 + 1; //2
$yhteen2 = 1 + 2 + 3 + 4 + 5; //15

$vahennys1 = 4 - 5; //-1
$vahennys2 = 10 - 5 - 3; //2

$kerto1 = 5 * 6; //30
$kerto2 = 60 * 60 * 24 * 365; //31536000

$jako1 = 24 / 8; //3
$jako2 = 50 / 5 / 3; //3.3333333333333

$jjaannos = 8 % 5; //3

$yhd1 = 5 * (10 + 3) - 8; //57
$yhd2 = 125 / ((1 + 1 + 3) * 5); //5
?>
<?php
//esimerkkejä laskutoimituksista muuttujilla

$eka = 10;
$toka = 5;

$yhteen = $eka + $toka; //15
$vahennys = $eka - $toka; //5
$kerto = $eka * $toka; //50
$jako = $eka / $toka; //2

$yhd = (($eka - $toka) + ($toka + $eka)) / $eka; //2
?>

Eräitä yleisiä laskutoimituksia voidaan merkitä lyhyemmin. Nämä merkinnät löytyvät allaolevasta taulukosta.

laskutoimituslyhennetty muoto
$a = $a + $b$a += $b
$a = $a - $b$a -= $b
$a = $a * $b$a *= $b
$a = $a / $b$a /= $b
$a = $a + 1$a++
$a = $a - 1$a--
$a = $a + 1++$a
$a = $a - 1--$a

Merkintöjen $a++ ja ++$a ero on siinä, että mikäli merkintä asetetaan muuttujan arvoksi, $a++ palauttaa $a:n arvon ennen lisäystä ja ++$a lisäyksen jälkeen. Sama pätee luonnollisesti merkintöihin $a-- ja --$a.

<?php
//lisäysmerkinnän paikan välinen ero
$a = 5;
$b = ++$a; //$b = 6

$a = 5;
$b = $a++; //$b = 5
?>

Muuttuja muuttujasta

Jos muuttujan nimi on merkkijonossa, sen arvoon päästään käsiksi laittamalla merkkijonomuuttujan eteen toinen dollarimerkki.

<?php
$hinta = 50;
$muuttuja = "hinta";
echo $$muuttuja; //50
?>

Taulukot

Jos skriptissä esiintyy useita samantyyppisiä muuttujia, on järkevää luoda niistä taulukko. Taulukko sisältää joukon arvoja, joihin viitataan yksilöllisillä tunnuksilla eli indekseillä. Tunnuksien täytyy olla joko kokonaislukuja tai merkkijonoja, ja niiden arvot voivat olla mitä tahansa muuttujatyyppiä, myös toisia taulukoita.

Taulukon luominen tapahtuu esimerkiksi array-funktiolla. Jos ilmoitetaan pelkät arvot, niiden indekseinä ovat numerot järjestyksessä nollasta alkaen. Toinen vaihtoehto on ilmoittaa myös indeksit taulukon määrittelyn yhteydessä.

<?php
//luodaan taulukko autonmerkeistä
$autot = array("Audi", "BMW", "Cadillac", "Daihatsu");

//luodaan taulukko maiden pääkaupungeista
$kaupungit = array("Ruotsi" => "Tukholma", "Saksa" => "Berliini", "Suomi" => "Helsinki");
?>

Taulukon arvoja voi käyttää kuin tavallisia muuttujia. Indeksi merkitään hakasulkuihin taulukon nimen jälkeen.

<?php
//tulostetaan tietoa edellisen esimerkin taulukoista

echo $autot[0]; //Audi
echo $autot[2]; //Cadillac

echo "Suomen pääkaupunki on " . $kaupungit["Suomi"] . ".";
?>

Taulukon arvoja voi myös muuttaa ja lisätä samalla tavalla. Jos indeksi jätetään merkitsemättä, indeksiksi valitaan seuraava järjestyksessä oleva. Taulukon voi myös luoda suoraan tällä tavalla, array-funktiota ei ole pakko käyttää.

<?php
//lisätään autotaulukkoon uutta tietoa
$autot[] = "Fiat"; //indeksiksi tulee 4
$autot[] = "Honda"; //indeksiksi tulee 5

//lisätään Belgia ja sen pääkaupunki Bryssel
$kaupungit["Belgia"] = "Bryssel";
?>

Funktio count palauttaa taulukon arvojen lukumäärän.

<?php
//tulostetaan taulukojen arvojen lukumäärät
echo "Autoja on " . count($autot) . ". ";
echo "Kaupunkeja on " . count($kaupungit) . ". ";
?>

PHP sisältää suuren joukon taulukkojen käyttöön liittyviä funktioita, joista on usein suurta hyötyä skriptin toteutuksessa. Täydellinen lista taulukkofunktioista löytyy PHP:n manuaalista.

Loppusanat

Opassarjan toinen osa alkaa olla lopussaan. Yritin saada mukaan mahdollisimman paljon asiaa muuttujista ja taulukoista, toivottavasti mitään olennaista ei unohtunut. Palautetta voi edelleen lähettää sähköpostilla tai muilla tavoin. Seuraavan oppaan aiheita ovat tärkeimmät ehto- ja silmukkarakenteet.

Antti Laaksonen, 1.3.2003


Kommentit

Mv [26.02.2003 20:30:22]

#

Onko tulossa vielä kolmas osa? Kannattaisi seuraavassa esitellä esimkerkiksi evästeet ja esimerkiksi $_GET ja $_Post

Antti Laaksonen [27.02.2003 13:30:56]

#

Tokihan oppaaseen lisää osia tulee. Kolmannessa osassa on tietoa ehto- ja silmukkalauseista - neljännestä osasta löytyy mm. lomakkeiden käyttö.

Gwaur [28.02.2003 21:12:45]

#

Aarg! Pois tuo Datsun tuolta, se kolhi meidän autoa viime syksynä! :D

Antti Laaksonen [01.03.2003 15:43:22]

#

Kurja juttu, kuitenkaan syyllinen ei ollut auto vaan sen ajaja. Laitoin kuitenkin Daihatsun sen tilalle. :)

Tumpi [03.03.2003 15:49:58]

#

Seuraaviin osiin tietoa date()-funktiosta, se on tärkeä...

Gwaur [08.03.2003 17:06:48]

#

Äh, mun äidin edellinen auto oli Daihatsu ja sekin ihan syvältä... :D

miksuman [22.03.2003 21:15:03]

#

Tuohan on melkeen yhtä selkeetä kuin Pascal muinoin :)

Koodi [21.07.2004 13:51:51]

#

Näin hieman myöhässä muhiin nähden luen tätä, mutta hyvä opas.

Cardles [02.03.2005 11:30:55]

#

Jotta joka vuosi tulis tälle oppaalle kommenttia, nii kehun itekki tätä. Hyvä opas :)

thuge94 [13.04.2005 20:28:19]

#

Tosi hyvä opas. Opettelen koko ajan tästä oppaasta PHP:tä. Tottakai valmiista scriptistä oppii paljon.

jukuri [25.09.2005 10:52:34]

#

Kysymys olis tällaisesta merkinnästä (operaattorista?) eli tämä merkki: "=>"
Mikä olisi sen määritelmä(tarkoitus jne)? Jos joku voisi valistaa.

Taulukoiden alkioihin sillä ilmeisesti viitataan yllä olevissa esimerkeissä:

$kaupungit = array("Ruotsi" => "Tukholma", "Saksa" => "Berliini", "Suomi" => "Helsinki");

miiro [11.02.2006 19:29:41]

#

=> on operaattorina ainakin visual basicissa pienempi kuin tai saman arvoinen kuin.
eli if (2 = 3 or 2 > 3) ...
palauttaisi sen mukaan saman kuin
if (2 => 3) ...
edit: jooniinno php:ssähän validi muoto on >=

arnold super [12.02.2006 14:49:42]

#

ei se tässä sitä tarkoita, ellen väärin ymmärtänyt

u-2623 [09.04.2006 16:38:35]

#

PHP:ssä >= tarkoittaa suurempaa tai yhtäsuurta.
Ja loogisesti <= on pienempi tai yhtäsuuri.

pienipoika [04.11.2006 12:57:23]

#

siis tuo => merkitsee vain sen että "ruotsi" => "tukholma"
ruotsi on taulukon alkion nimi ja => kertoo että sen sisältö
on tukholma

Juhko [18.12.2006 15:01:46]

#

Siis vähä hyvä opas!

moptim [26.01.2007 16:30:39]

#

Jep

tekari [10.10.2007 20:43:50]

#

Aijai, melkein vuosi edellisestä kommentista. Korjataan tilannetta. Mahtava opas. Erittäin paljon hyötyä on ollut.

z3zim4 [01.04.2008 19:02:32]

#

Joo erittäin hyödyllinen opas, ensimmäinen PHP-opas, josta ymmärrän jotain xD

apsu [05.07.2008 04:54:22]

#

Hirveen hyvä, nyt ymmärrän jotain array() funktiostakin! :)

JAMSUO93 [19.01.2009 22:12:48]

#

good opas

novice [10.09.2009 22:11:20]

#

Veri guud

IiroSalminen [11.06.2010 01:30:42]

#

ettei mee putki rikki ni, helpottaa paljon itseopiskelua, loistava!

Numis97 [04.11.2010 18:06:33]

#

Näitä voisi havainnollistaa Ohjelmointiputkan palvelimella olevilla esimerkeillä?

Rickken [21.11.2010 14:03:23]

#

Hyvä opas ymmärsin edes jotain.

teemuh [12.09.2011 14:56:28]

#

ja jotta combo ei menisi vielläkään rikki niin hyvä opas!

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