Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Lekce 4 - Textové řetězce podruhé a pole v PHP

Dnes se naučíme zadávat textové řetězce různými způsoby a představíme si pole.

Zápisy řetězců a escapování

V minulém dílu jsme si ukazovali, jak zapisovat textové řetězce. Víme, že je můžeme psát do apostrofů nebo uvozovek. Abychom mohli stavět na nějakých základech, vysvětleme si rozdíly v těchto dvou zápisech.

Apostrofy

Pokud napíšeme textový řetězec do apostrofů (jednoduchých uvozovek), vloží se do něj přesně ten text, který je uveden.

 Apostrofy na české klávesnici napíšeme za pomocí klávesy SHIFT a klávesy na obrázku:

Apostrof - Základní konstrukce jazyka PHP

Kód s apostrofy může vypadat třeba takto:

$jmeno = 'Karel';
$text = 'Jmenuji se $jmeno \n S tímto "jménem" jsem spokojen.';
echo($text);

A jako výstup dostaneme:

Tvoje stránka
localhost

Vidíme, že si PHP vůbec nevšímá znaku dolaru, dvojitých uvozovek ani zpětného lomítka (to si vysvětlíme dále).

Pokud chceme do řetězce v apostrofech vložit obsah nějaké proměnné, nemáme jinou možnost, než použít operátor tečky:

$jmeno = 'Karel';
$text = 'Jmenuji se ' . $jmeno . ' \n S tímto "jménem" jsem spokojen.';
echo($text);

Výhodu možnosti vložení dvojitých uvozovek do apostrofů pocítíme ve chvíli, kdy vypisujeme nějaké HTML. V něm se totiž používají dvojité uvozovky pro zápis atributů:

echo('PHP se učím z tutoriálů na <a href="http://www.itnetwork.cz">ITnetwork</a>.');

Pokud bychom chtěli do textu vložit apostrof, musíme ho tzv. odescapovat, aby si ho PHP nespletlo s ukončením řetězce. Escapování provedeme pomocí zpětného lomítka \.

 Zpětné lomítko se píše na české klávesnici pomocí pravého ALT a písmene Q:

Zpětné lomítko - Základní konstrukce jazyka PHP

V kódu by edescapování vypadalo takto:

$text = 'Chvilku mi trvalo, než jsem na klávesnici našel znaky ", \' a ;';
echo($text);

V proměnné je nyní uloženo:

Chvilku mi trvalo, než jsem na klávesnici našel znaky ", ' a ;

Uvozovky

Ukažme si nyní, k čemu se hodí uvozovky. Uvozovky jsou v PHP chytřejší apostrofy a do řetězce zapsaném pomocí uvozovek můžeme jednoduše vkládat proměnné:

$jmeno = 'Karel';
$text = "Jmenuji se $jmeno \nS tímto jménem jsem spokojen.";
echo($text);

Výstup bude následující:

Tvoje stránka
localhost

Do textu se vložila hodnota proměnné $jmeno. Také vidíte, že se nevypsala sekvence \. To z toho důvodu, že pomocí lomítka se v uvozovkách zapisují speciální znaky. Z těch základních je \n odřádkování a \t tabulátor. V HTML se odřádkování neprojeví, ale když se podíváte do zdrojového kódu vygenerované stránky, tak ho tam uvidíte.

Zpracování uvozovek je samozřejmě z důvodu zpracování proměnných o něco pomalejší, ale vaše aplikace to nijak neovlivní. Můžete si tedy používat tu variantu, která vám vyhovuje. Dvojité uvozovky se určitě nehodí na výpis HTML. Lze v nich totiž psát apostrofy, ale uvozovky se musí escapovat:

echo("PHP se učím z tutoriálů na <a href=\"http://www.itnetwork.cz\">ITnetwork</a>.");

Varianta výše je velmi nepřehledná. Osobně používám skoro pořád apostrofy a proměnné vkládám pomocí konkatenace (tečky). Přijde mi to přehlednější.

Ještě pro úplnost dodám, že pokud byste někdy potřebovali vypsat zpětné lomítko v uvozovkách, musíte zapsat dvě za sebou, jinak to bude PHP brát jako že něco escapujete.

Pole

Představte si, že ve svém programu potřebujete uložit více proměnných stejného typu. Např. česká jména měsíců, 10 známek ze školy, platy 100 uživatelů nebo databázi tisíců firem. Asi tušíte, že bude nějaká lepší cesta, než začít zběsile bušit proměnné znamka1, znamka2, znamka3... A co kdyby se program rozšířil a známek by bylo tisíc? A jak by se potom počítal průměr z těchto známek?

Pro uložení více proměnných stejného typu nám PHP nabízí datovou strukturu, které se říká pole. V PHP jsou 2 typy polí. Dnes si popíšeme první z nich.

Číselně indexovaná pole

Číselně indexované pole si můžeme představit jako řadu přihrádek někde v paměti počítače (ono mimochodem vnitřně opravdu tak vypadá). Přihrádky jsou číslované vždy od nuly a jejich číslům se říká indexy. V programování víceméně vše začíná od nuly, ne nadarmo se říká, že první dítě programátora je nulté :) Přihrádek můžeme mít kolik chceme a můžeme si do nich uložit hodnoty libovolného typu a to dokonce i tak, že bude v jedné přihrádce třeba číslo a v druhé text. V praxi by to ovšem nemělo valný smysl.

Na obrázku níže vidíte znázorněné pole, ve kterém je uloženo 8 čísel:

Pole v PHP - Základní konstrukce jazyka PHP

Zkusme si něco podobného naprogramovat, udělejme si zmíněné pole známek. Známky opět napíšeme pevně do skriptu, jelikož ještě neumíme formuláře. To napravíme hned v příští lekci :)

Pole si uložíme do klasické proměnné. Pojmenujeme ji tak, co v ní je a v množném čísle, tedy v našem případě $znamky. Pro samotnou definici pole používáme funkci array().

$znamky = array();

Nyní je v proměnné $znamky prázdné pole. Pokud používáte PHP 5.4 nebo novější, můžete pole zapsat i s hranatými závorkami [].

 Hranaté závorky se na české klávesnici napíši pomocí klávesy pravý ALT a písmeny F a G:

Hranaté závorky - Základní konstrukce jazyka PHP

Definování pole s hranatými závorkami by vypadalo následovně:

$znamky = [];

Tento zápis je kratší a obecně lepší, ale já se budu držet starší definice, jelikož někteří čtenáři mohou používat webhostingy se starší verzi PHP.

Vkládání prvků do pole

Nyní do pole přidejme několik známek. Jak je zvykem, můžeme to udělat několika způsoby.

Nový prvek na konec pole přidáme takto:

$znamky[] = 1;
$znamky[] = 2;
$znamky[] = 5;

Výsledné pole tedy vypadá takto:

1, 2, 5

Funkce echo() nám pole moc dobře nevypíše, ale můžeme si ho nechat vypsat pomocí funkce print_r().

 Podtržítko na české klávesnici napíšeme pomocí klávesy SHIFT a následujícího znaku:

Podtržítko - Základní konstrukce jazyka PHP

Nyní vypíšeme pole $znamky pomocí funkce print_r():

print_r($znamky);

Stejně tak můžeme vložit prvek na konkrétní index v poli. Pokud prvek na tomto indexu už je, prostě se přepíše:

$znamky[0] = 1;
$znamky[1] = 3;
$znamky[2] = 5;
$znamky[1] = 2; // Přepíše prvek na indexu 1 (3) na dvojku

Poslední řádek vloží na index 1 prvek 2, tím přepíše hodnotu 3, která se na tento index již vložila na druhém řádku. Nemá to zde samozřejmě žádný smysl, jen ten, že si to vyzkoušíme :) To za dvěma lomítky je tzv. komentář. PHP si těchto textů nevšímá a slouží pro lepší orientaci programátorů v kódu. Určitě je dobrý nápad komentáře používat. Dají se zapsat i na více řádků a to takto:

/*
 Tento text PHP ignoruje a platí
 až do ukončení komentáře. Můžeme si tak popsat
 složitější části programu, abychom nezapomněli
 jak jsme to mysleli, až ke kódu přijdeme za pár měsíců :)
*/

Pokud známky předem víme, můžeme pole vytvořit rovnou se zadáním jeho obsahu:

$znamky = array(1, 2, 3, 4, 2, 2, 1, 3, 2, 5);

Čtení hodnot z pole

Pokud z pole potřebujeme načíst nějakou hodnotu, uděláme to pomocí indexu:

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

Výstup:

Tvoje stránka
localhost

Praktické ukázky použití polí

PHP nám nabízí pro práci s poli spoustu funkcí. I když si je popíšeme až v dalších dílech, udělejme si jen takové dvě malé ochutnávky.

Průměr známek

Pomocí funkcí array_sum() (součet) a count() (počet) spočítáme průměr zadaných známek:

$znamky = array(1, 2, 3, 4, 2, 2, 1, 3, 2, 5);
$prumer = array_sum($znamky) / count($znamky);
echo('Můj průměr je: ' . $prumer);

Výstup programu:

Tvoje stránka
localhost

Asi si dokážete představit, jak špatně by byl program čitelný, kdybychom pole neznali a psali $soucet = $znamka1 + $znamka2 + $znamka3... Nyní jsme jen jednoduše vydělili součet prvků v poli jejich počtem.

České datum

Jak již bylo řečeno, do pole si můžeme uložit prakticky cokoli, třeba názvy měsíců. Můžeme potom vypsat uživateli aktuální datum a to dokonce česky:

$mesice = array('leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
$den = date('j');
$mesic = date('m');
$mesicSlovy = $mesice[$mesic - 1];
$rok = date('Y');
echo("Ahoj, dnes je $den. $mesicSlovy $rok");

V programu vytvoříme pole názvů měsíců. Dále si pomocí funkce date() zjistíme číslo dne, měsíce a roku. Do proměnné $mesicSlovy si budeme chtít uložit aktuální měsíc z pole. Když je říjen (měsíc 10), máme v proměnné $mesic hodnotu 10. Prvek v poli s hodnotou "říjen" má však index 9, jelikož jsou číslované od nuly. Proto sáhneme na přihrádku s indexem $mesic - 1. Nakonec jen jednoduše vypíšeme obsah proměnných. Kompletní práci s datem a časem se také naučíme později.

Výstup:

Tvoje stránka
localhost

K polím se budeme často vracet, je kolem nich ještě spoustu teorie. Víme však, že i když je teorie hezká věc, měli bychom dělat i něco praktického.

V následujícím cvičení, Řešené úlohy k 1.-4. lekci PHP, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Kvíz - Úvod do základů a proměnných v PHP
Všechny články v sekci
Základní konstrukce jazyka PHP
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 1.-4. lekci PHP
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
498 hlasů
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 se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity