4. diel - Textové reťazce druhýkrát a polia v PHP
V minulej lekcii, Premenné a typový systém v PHP , sme si vysvetlili základy práce s premennými. Dnes s nimi budeme v PHP tutoriálu pokračovať a predstavíme si pole.
Zápisy reťazcov alebo uvádzacích
V minulom dieli sme si ukazovali, ako zapisovať textové reťazce. Vieme, že ich môžeme písať do apostrofov alebo úvodzoviek. Aby sme mohli stavať na nejakých základoch, vysvetlíme si rozdiely v týchto dvoch zápisoch.
Apostrofy
Ak napíšeme textový reťazec do apostrofov (jednoduchých úvodzoviek), vloží sa do neho presne ten text, ktorý je uvedený:
{PHP}
$jmeno = 'Karel';
$text = 'Volám sa $jmeno \n S týmto "menom" som spokojný.';
echo($text);
{/PHP}
výstup:
Vidíme, že si PHP vôbec nevšíma znaku dolára, dvojitých úvodzoviek ani spätnej lomky (to si vysvetlíme ďalej).
Ak chceme do reťazca apostrofmi vložiť obsah nejaké premenné, nemáme inú možnosť, než použiť operátor bodky:
{PHP}
$jmeno = 'Karel';
$text = 'Volám sa ' . $jmeno . ' \n S týmto "menom" som spokojný.';
echo($text);
{/PHP}
Výhodu možnosti vloženie dvojitých úvodzoviek do apostrofov pocítime vo chvíli, keď vypisujeme nejaké HTML. V ňom sa totiž používajú dvojité úvodzovky pre zápis atribútov:
{PHP}
echo('Php sa učím z tutoriálov na <a href="http://www.itnetwork.cz">ITnetwork</a>.');
{/PHP}
Ak by sme chceli do textu vložiť apostrof, musíme ho tzv. Odescapovat, aby si ho PHP nepomýlil s ukončením reťazca. Uvádzacích vykonáme pomocou spätného lomky:
{PHP}
$text = 'Chvíľku mi trvalo, než som na klávesnici našiel znaky ", \' a ;';
echo($text);
{/PHP}
V premennej je teraz uložené:
Chvíľku mi trvalo, než som na klávesnici našiel znaky ", ' a ;
Úvodzovky
Ukážme si teraz, na čo sa hodí úvodzovky. Úvodzovky sú v PHP múdrejší apostrof a do reťazca zapísanom pomocou úvodzoviek môžeme jednoducho vkladať premenné:
{PHP}
$jmeno = 'Karel';
$text = "Volám sa $jmeno \nS týmto menom som spokojný.";
echo($text);
{/PHP}
Výstup bude nasledujúci:
Volám sa Karel S týmto menom som spokojný.
Do textu sa vložila hodnota premennej $jmeno
. Tiež vidíte,
že sa nevypísala sekvencie \n
. To z toho dôvodu, že pomocou
lomky sa v úvodzovkách zapisujú špeciálne znaky. Z tých základných je
\n
odriadkovanie a \t
tabulátor. V HTML sa
odriadkovanie neprejaví, ale keď sa pozriete do zdrojového kódu
vygenerované stránky, tak ho tam uvidíte.
Spracovanie úvodzoviek je samozrejme z dôvodu spracovania premenných o niečo pomalší, ale vaša aplikácia to nijako neovplyvní. Môžete si teda používať tú variantu, ktorá vám vyhovuje. Dvojité úvodzovky sa určite nehodí na výpis HTML. Možno v nich totiž písať apostrofy, ale úvodzovky sa musí escapovat:
{PHP}
echo("Php sa učím z tutoriálov na <a href=\"http://www.itnetwork.cz\">ITnetwork</a>.");
{/PHP}
Variant vyššie je veľmi neprehľadná. Osobne používam skoro stále apostrof a premenné vkladám pomocou konkatenace (bodky). Príde mi to prehľadnejšie.
Ešte pre úplnosť dodám, že ak by ste niekedy potrebovali vypísať spätné lomítko v úvodzovkách, musíte zapísať dve za sebou, inak to bude PHP brať ako že niečo escapujete.
Poľa
Predstavte si, že vo svojom programe potrebujete uložiť viac premenných
rovnakého typu. Napr. česká mená mesiacov, 10 známok zo školy, platy 100
užívateľov alebo databázu tisícok firiem. Asi tušíte, že bude nejaká
lepšia cesta, než začať zbesilo búšiť premenné znamka1
,
znamka2
, znamka3
... A čo keby sa program rozšíril a
známok by bolo tisíc? A ako by sa potom počítal priemer z týchto
známok?
Pre uloženie viac premenných rovnakého typu nám PHP ponúka dátovú štruktúru, ktorej sa hovorí poľa. V PHP sú 2 typy polí. Dnes si popíšeme prvý z nich.
Číselne indexovaná poľa
Číselne indexované pole si môžeme predstaviť ako rad priehradiek niekde v pamäti počítača (ono mimochodom vnútorne naozaj tak vyzerá). Priehradky sú číslované vždy od nuly a ich číslam sa hovorí indexy. V programovaní viacmenej všetko začína od nuly, nie nadarmo sa hovorí, že prvé dieťa programátora je nultej Priehradiek môžeme mať koľko chceme a môžeme si do nich uložiť hodnoty ľubovoľného typu a to dokonca aj tak, že bude v jednej priehradke potrebné číslo a v druhej text. V praxi by to však nemalo veľký zmysel.
Na obrázku nižšie vidíte znázornené poľa, v ktorom je uložené 8 čísiel:
Skúsme si niečo podobné naprogramovať, urobme si spomínané pole známok. Známky opäť napíšeme pevne do skriptu, pretože ešte nevieme formulára. To napravíme hneď v nasledujúcej lekcii
Pole si uložíme do klasickej premennej. Pomenujeme ju tak, čo v nej je a v
množnom čísle, teda v našom prípade $znamky
. Pre samotnú
definíciu poľa používame funkciu array()
.
$znamky = array();
Teraz je v premennej $znamky
prázdne pole. Ak používate PHP
5.4 alebo novší, môžete pole zapísať aj takto:
$znamky = [];
Tento zápis je kratšia a všeobecne lepšie, ale ja sa budem držať staršie definície, pretože niektorí čitatelia môžu používať staršie webhostingy.
Vkladanie prvkov do poľa
Teraz do poľa pridajme niekoľko známok. Ako je zvykom, môžeme to urobiť niekoľkými spôsobmi.
Nový prvok na koniec poľa pridáme takto:
$znamky[] = 1; $znamky[] = 2; $znamky[] = 5;
Výsledné pole teda vyzerá takto:
1, 2, 5
Funkcia echo()
nám pole moc dobre nevypíše, ale môžeme si
ho nechať vypísať pomocou funkcie print_r()
:
{PHP}
$znamky = [];
$znamky[] = 1;
$znamky[] = 2;
$znamky[] = 5;
print_r($znamky);
{/PHP}
Rovnako tak môžeme vložiť prvok na konkrétne index v poli. Ak prvok na tomto indexe už je, jednoducho sa prepíše.
$znamky[0] = 1; $znamky[1] = 3; $znamky[2] = 5; $znamky[1] = 2; // Prepíše prvok na indexe 1 (3) na dvojku
Posledný riadok vloží na index 1
prvok 2
, tým
prepíše hodnotu 3
, ktorá sa na tento index už vložila na
druhom riadku. Nemá to tu samozrejme žiadny zmysel, len ten, že si to
vyskúšame To za dvoma
lomkami je tzv. Komentár. PHP si týchto textov nevšíma a slúži pre lepšiu
orientáciu programátorov v kóde. Určite je dobrý nápad komentáre
používať. Dajú sa zapísať aj na viac riadkov a to takto:
/*
Tento text PHP ignoruje a platí
až do ukončenia komentára. Môžeme si tak popísať
zložitejšie časti programu, aby sme nezabudli
ako sme to mysleli, až ku kódu prídeme za pár mesiacov :)
*/
Ak známky vopred vieme, môžeme pole vytvoriť rovno sa zadaním jeho obsahu:
$znamky = array(1, 2, 3, 4, 2, 2, 1, 3, 2, 5);
Čítanie hodnôt z poľa
Ak z poľa potrebujeme načítať nejakú hodnotu, urobíme to pomocou indexu:
{PHP}
$znamky = array(1, 2, 3, 4, 2, 2, 1, 3, 2, 5);
echo('Tretí známka v poli je ' . $znamky[2]);
{/PHP}
výstup:
Praktické ukážky použitia polí
PHP nám ponúka pre prácu s poľami veľa funkcií. Aj keď si ich popíšeme až v ďalších dieloch, urobme si len také dve malé ochutnávky.
Priemer známok
Pomocou funkcií array_sum()
(súčet) a count()
(počet) spočítame priemer zadaných známok:
{PHP}
$znamky = array(1, 2, 3, 4, 2, 2, 1, 3, 2, 5);
$prumer = array_sum($znamky) / count($znamky);
echo('Môj priemer je: ' . $prumer);
{/PHP}
Výstup programu:
Asi si dokážete predstaviť, ako zle by bol program čitateľný, keby sme
polia nepoznali a písali $soucet = $znamka1
+
$znamka2
+ $znamka3
... Teraz sme len jednoducho
vydelili súčet prvkov v poli ich počtom.
Českej dátum
Ako už bolo povedané, do poľa si môžeme uložiť prakticky čokoľvek, trebárs názvy mesiacov. Môžeme potom vypísať užívateľovi aktuálny dátum a to dokonca po slovensky:
{PHP}
$mesice = array('január', 'február', 'marec', 'apríl', 'máj', 'jún', 'júl', 'august', 'septembra', 'október', 'november', 'december');
$den = date('j');
$mesic = date('m');
$mesicSlovy = $mesice[$mesic - 1];
$rok = date('Y');
echo("Ahoj, dnes je $den. $mesicSlovy $rok");
{/PHP}
V programe vytvoríme pole názvov mesiacov. Ďalej si pomocou funkcie
date()
zistíme číslo dňa, mesiaca a roku. Do premennej
$mesicSlovy
si budeme chcieť uložiť aktuálny mesiac z poľa.
Keď je október (mesiac 10), máme v premennej $mesic
hodnotu
10
. Prvok v poli s hodnotou "říjen"
má však index
9
, keďže sú číslované od nuly. Preto siahneme na priehradku s
indexom $mesic - 1
. Nakoniec len jednoducho vypíšeme obsah
premenných. Kompletné prácu s dátumom a časom sa tiež naučíme
neskôr.
výstup:
K poliam sa budeme často vracať, je okolo nich ešte veľa teórie. Vieme však, že aj keď je teória pekná vec, mali by sme robiť aj niečo praktické. V budúcej lekcii, Riešené úlohy k 1.-4. lekciu PHP , si naprogramujeme svoju prvú formulárové aplikáciu, bude to jednoduchá kalkulačka.
V nasledujúcom cvičení, Riešené úlohy k 1.-4. lekciu PHP, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.