IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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ý:

$jmeno = 'Karel';
$text = 'Volám sa $jmeno \n S týmto "menom" som spokojný.';
echo($text);

výstup:

Tvoja stránka
localhost

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:

$jmeno = 'Karel';
$text = 'Volám sa ' . $jmeno . ' \n S týmto "menom" som spokojný.';
echo($text);

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:

echo('Php sa učím z tutoriálov na <a href="http://www.itnetwork.cz">ITnetwork</a>.');

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:

$text = 'Chvíľku mi trvalo, než som na klávesnici našiel znaky ", \' a ;';
echo($text);

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é:

$jmeno = 'Karel';
$text = "Volám sa $jmeno \nS týmto menom som spokojný.";
echo($text);

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:

echo("Php sa učím z tutoriálov na <a href=\"http://www.itnetwork.cz\">ITnetwork</a>.");

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:

Pole v PHP - Základné konštrukcie jazyka PHP

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():

print_r($znamky);

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:

echo('Tretí známka v poli je ' . $znamky[2]);

výstup:

Tvoja stránka
localhost

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:

$znamky = array(1, 2, 3, 4, 2, 2, 1, 3, 2, 5);
$prumer = array_sum($znamky) / count($znamky);
echo('Môj priemer je: ' . $prumer);

Výstup programu:

Tvoja stránka
localhost

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:

$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");

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:

Tvoja stránka
localhost

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í.


 

Predchádzajúci článok
Premenné a typový systém v PHP
Všetky články v sekcii
Základné konštrukcie jazyka PHP
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-4. lekciu PHP
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
8 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity