Tunnus:

Salasana:

Uusi käyttäjä

Haku

Pikalinkit

Kesähaaste 2010

Paranna Morpion-pelin kansainvälisiä ennätyksiä!

Ohjeet | Nettipeli | Tuloslista

Putkaposti

Suunnittele tiedosto, josta tulee suuri ZIP-paketti!

Vastauksia: 32
Paras: 1158

Tehtävään...

Keskustelu

Millä tavalla aiemmissa keskusteluissa esitetyn formin sijoittaminen tuohon linkin paikalle tuottaa ongelmia? (Nettisivut ja -ohjelmointi) lisää...


Oppaat: Käytännön PHP-opas

Kirjoittaja: Antti Laaksonen

Opassarja: [ 1 2 3 4 5 6 7 8 9 ]

Edellinen opasSeuraava opas

Tulostettava versio: tämä opas | koko opassarja

Osa 2 - Muuttujat ja taulukot

Muuttujien merkintä ja tyypitSijoituslauseMuuttujien tulostaminenMuuttujien yhdistäminenLaskutoimituksetMuuttuja muuttujastaTaulukotLoppusanat

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
  • kokonaisluku
  • liukuluku (desimaaliluku)
  • boolean-arvo (tosi / epätosi)
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

Edellinen opasSeuraava opas


Mv [26.02.2003 20:30:22]LainaaMuokkaa
Onko tulossa vielä kolmas osa? Kannattaisi seuraavassa esitellä esimkerkiksi evästeet ja esimerkiksi $_GET ja $_Post
Antti Laaksonen [27.02.2003 13:30:56]LainaaMuokkaa
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]LainaaMuokkaa
Aarg! Pois tuo Datsun tuolta, se kolhi meidän autoa viime syksynä! :D
Antti Laaksonen [01.03.2003 15:43:22]LainaaMuokkaa
Kurja juttu, kuitenkaan syyllinen ei ollut auto vaan sen ajaja. Laitoin kuitenkin Daihatsun sen tilalle. :)
Tumpi [03.03.2003 15:49:58]LainaaMuokkaa
Seuraaviin osiin tietoa date()-funktiosta, se on tärkeä...
Gwaur [08.03.2003 17:06:48]LainaaMuokkaa
Äh, mun äidin edellinen auto oli Daihatsu ja sekin ihan syvältä... :D
miksuman [22.03.2003 21:15:03]LainaaMuokkaa
Tuohan on melkeen yhtä selkeetä kuin Pascal muinoin :)
Koodi [21.07.2004 13:51:51]LainaaMuokkaa
Näin hieman myöhässä muhiin nähden luen tätä, mutta hyvä opas.
Cardles [02.03.2005 11:30:55]LainaaMuokkaa
Jotta joka vuosi tulis tälle oppaalle kommenttia, nii kehun itekki tätä. Hyvä opas :)
thuge94 [13.04.2005 20:28:19]LainaaMuokkaa
Tosi hyvä opas. Opettelen koko ajan tästä oppaasta PHP:tä. Tottakai valmiista scriptistä oppii paljon.
jukuri [25.09.2005 10:52:34]LainaaMuokkaa
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]LainaaMuokkaa
=> 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-_ [12.02.2006 14:49:42]LainaaMuokkaa
ei se tässä sitä tarkoita, ellen väärin ymmärtänyt
travenin [09.04.2006 16:38:35]LainaaMuokkaa
PHP:ssä >= tarkoittaa suurempaa tai yhtäsuurta.
Ja loogisesti <= on pienempi tai yhtäsuuri.
arn0uld [04.11.2006 12:57:23]LainaaMuokkaa
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]LainaaMuokkaa
Siis vähä hyvä opas!
moptim [26.01.2007 16:30:39]LainaaMuokkaa
Jep
tekari [10.10.2007 20:43:50]LainaaMuokkaa
Aijai, melkein vuosi edellisestä kommentista. Korjataan tilannetta. Mahtava opas. Erittäin paljon hyötyä on ollut.
z3zim4 [01.04.2008 19:02:32]LainaaMuokkaa
Joo erittäin hyödyllinen opas, ensimmäinen PHP-opas, josta ymmärrän jotain xD
apsu [05.07.2008 04:54:22]LainaaMuokkaa
Hirveen hyvä, nyt ymmärrän jotain array() funktiostakin! :)
JAMSUO93 [19.01.2009 22:12:48]LainaaMuokkaa
good opas
novice [10.09.2009 22:11:20]LainaaMuokkaa
Veri guud
IiroSalminen [11.06.2010 01:30:42]LainaaMuokkaa
ettei mee putki rikki ni, helpottaa paljon itseopiskelua, loistava!

ylläpito Antti Laaksonen, ulkoasu Otto Seiskari