- Základní údaje
- Kategorie: PHP
- Zobrazení: 377
Často se stává, že potřebujeme kombinovat více podmínek dohromady. Pro tyto účely existují v PHP tzv. logické operace. Logická operace vyhodnocuje vždy hodnotu ano či ne, resp. true nebo false, nebo také jedničku či nulu. Logická negace (!) Jedná se o nejjednodušší operaci, tedy obrácení podmínky. Provádí vlastně jen to, že z pravdivé podmínky udělá nepravdivou a naopak. V PHP se logická negace zapisuje tak, že podmínce přiřadíme znak vykřičník - !
<?php
var_dump(10 > 20);
// Tato podmínka je nepravdivá. Vypíše: bool(false)
echo '<br>';
// Zajistí, aby se další výpis vypsal na další řádku.
var_dump(!(10 > 20));
// Podmínka je pravdivá, protože je použita operace negace, která otočila pravdivost podmínky.
// Vypíše: bool(true)
?>
Podmínku, kterou chcete obrátit (negovat) je vždy dobré umisťovat do závorek. Logické operace and a or Tyto logické operace slouží ke spojení dvou podmínek tak, aby se výsledek tvářil jako jedna podmínka. Obě operace se liší tím, jak vypočítavají výslednou hodnotu podmínky v závislosti na obou původních podmínkách, ze kterých jsou složeny. Logickou operaci and lze jinak také vyjádřit slovním spojením „a zároveň“. Tato operace považuje dvě podmínky za pravdivé jedině tehdy, pokud jsou obě pravdivé. Oproti tomu logické operaci or (nebo) stačí, aby alespoň jedna ze dvou podmínek platila.
Logická operace and |
|
Logická operace or |
||||
Podmínka 1 |
Podmínka 2 |
Výsledek |
Podmínka 1 |
Podmínka 2 |
Výsledek |
|
pravda | pravda | pravda | pravda | pravda | pravda | |
pravda | nepravda | nepravda | pravda | nepravda | pravda | |
nepravda | pravda | nepravda | nepravda | pravda | pravda | |
nepravda | nepravda | nepravda | nepravda | nepravda | nepravda |
Příklad s logickou operací and:
<?php
$znamka = 1;
// Zde zadáme školní známku. Vyzkoušejte si sem zadávat různá čísla.
var_dump( $znamka >= 1 and $znamka <= 5 );
// Podmínka je pravdivá, pokud je v proměnné $znamka uložena platná školní známka.
?>
Pokud budete do proměnné místo současné jedničky zadávat známky jedna až pět, bude stále výsledkem pravda. Jakmile zadáte známku nižší než jedna nebo vyšší než pět, stane se minimálně jedna ze dvou porovnávaných podmínek nepravdivou a tím pádem celý výsledek funkce var_dump bude nepravda. Příklad s logickou operací or:
<?php
$a = 2;
var_dump($a > 10 or $a == 2);
// Výsledek je pravdivá podmínka, protože alespoň jedna podmínka je pravdivá. Vypíše: bool(true)
?>
Dvojí zápis logické operace and a or Kromě klasických slov and a or můžete v PHP použít také zápis && (pravý Alt+C) a || (pravý Alt+W, programátoři tento znak nazývají „roura“). Tak že např. tyto dva zápisy jsou totožné:
$a > $b and $a != 3
//stejné jako:
$a > $b && $a != 3
I když jsou obojí zápisy možné, je mezi mini nepatrný rozdíl a to v tzv. prioritě (přednosti). Slova and a or mají tzv. nižší – příznivou prioritu, obvykle odpovídající programátorovým záměrům. Obecně je doporučováno raději používat právě tyto slovní vyjádření. Neúplné vyhodnocování logických výrazů pomocí and a or PHP se obecně snaží postupovat co nejúsporněji. Ctí zásadu „zdravé lenosti“. Právě v případě logické operace and je to velmi zřejmé. Jak již bylo napsáno, je u logické operace and potřeba k pravdivému výsledku, aby obě dvě části podmínky byly pravdivé. V každém jiném případě bude výsledek nepravdivý. Vysvětlení je v následujícím příkladu:
<?php
$a = 1;
$b = 2;
$c = 20;
$d = 20;
var_dump ($a > $b and $c == $d);
// Vypíše: bool(false)
?>
PHP postupuje tak, že jakmile zjistí, že je první část podmínky nepravdivá (není pravda, že proměnná a je větší než proměnná b), nemusí se již vůbec zabývat tím, co je ve druhé části podmínky (tedy to, že je proměnná c rovna proměnné d). Touto částí se již PHP vůbec nezabývá. Tím se skripty nepatrně zrychlují. V našem případě to nebude zcela jistě patrné, ovšem u složitějších programů to může hrát významnou roli. Tento způsob postupu se nevyužívá jen kvůli rychlosti zpracování, ale také z jiných důvodů, kdy je např. na proměnné navázán další složitější skript apod. (viz dále).
- Základní údaje
- Kategorie: PHP
- Zobrazení: 311
Cykly jsou konstrukce, které umožňují vykonávat stejné nebo podobné příkazy vícekrát po sobě. Cykly se používají velmi často a nedá se bez nich skoro napsat žádný rozumný skript. Součástí cyklu je i podmínka, která vyhodnocuje, kdy má již provádění cyklu skončit. Někdy potřebujeme, aby se určité cykly opakovaly po určitý počet opakování, třeba desetkrát, Jindy můžeme chtít, aby se cyklus opakoval po určitý čas, další variantou může být např. požadavek, aby cyklus neustále vypisoval určená data z databáze, než se vypíšou všechny apod. Proto existují v PHP pro různé varianty cyklů různé konstrukce:
- cyklus while
- cyklus do while
- cyklus for
- konstrukce switch
- cyklus foreach (viz kapitola Pole v PHP)
Cyklus while Je to nejjednodušší varianta cyklu. Základní tvar je:
while (podmínka)
příkaz_který_se_bude_cyklicky_opakovat;
Princip:
- Otestuje se podmínka. Pokud není pravdivá, cyklus while končí a PHP pokračuje za cyklem while
- Pokud je podmínka pravdivá, vykoná se příkaz a cyklus se opakuje.
Jinak řečeno, smyslem cyklu while je neustále dokola opakovat příkaz, dokud platí podmínka. Příkaz se však nemusí provést ani jednou. To v případě, že hned na začátku po testování je podmínka nepravdivá. Příklad cyklu while:
<?php
$i = 1;
// Proměnné $i je přiřazeno číslo 1
while ($i <= 5)
{
echo $i,' ';
// Vypiš číslo uložené v proměnné $i a pak vypiš mezeru, aby čísla nebyla nalepená hned na sobě.
++$i;
// Inkrementace proměnné $i, tedy zvětšení čísla o jedničku.
}
?>
Tento příklad vypisuje čísla od jedné do pěti. Příkaz break v cyklech Existuje možnost či potřeba přerušit provádění cyklu v určitém okamžiku. K tomuto účelu existuje příkaz break. Jakmile PHP narazí na tento příkaz, okamžitě cyklus předčasně ukončí:
<?php
$i = 1;
// Proměnné $i je přiřazeno číslo 1
while ($i <= 5)
{
if ($i > 2)
break;
// Pokud bude proměnná $i větší než dvě, vykonej příkaz break
echo $i,' ';
// Vypiš číslo uložené v proměnné $i a pak vypiš mezeru, aby čísla nebyla nalepená hned na sobě.
++$i;
// Inkrementace proměnné $i, tedy zvětšení čísla o jedničku.
}
?>
Cyklus do while Je velmi podobný cyklu while. Jediný rozdíl je v umístění podmínky, která se testuje.
do
příkaz_který_se_bude_cyklicky_opakovat;
while (podmínka);
Princip je tedy jednoduchý:
- Vykoná se příkaz
- Otestuje se podmínka. Pokud je pravdivá, pokračuje cyklus znovu od začátku
Na rozdíl od cyklu while se cyklus do while vykoná vždy alespoň jednou. Příklad:
<?php
$i = 1;
// Proměnné $i je přiřazeno číslo 1
do
{
echo $i,' ';
// Vypiš číslo uložené v proměnné $i a pak vypiš mezeru, aby čísla nebyla nalepená hned na sobě.
++$i;
// Inkrementace proměnné $i, tedy zvětšení čísla o jedničku.
}
while ($i <= 2);
?>
Cyklus for Cyklus for je nejsložitějším cyklem v PHP, přesto pro svou užitečnost patří k nejpoužívanějším cyklům vůbec. Používáme ho především tam, kde víme, kolikrát chceme cyklus opakovat. Jeho základní tvar vypadá následovně:
for (počáteční_příkaz; podmínka; příkaz_který_se_vykoná_po_každém_cyklu)
příkaz_který_se_bude_cyklicky_opakovat;
Jinak také:
for(inicializace proměnné; podmínka; operace) {skript}
Cyklus probíhá následovně:
- Nejdříve se vykoná počáteční příkaz
- Otestuje se podmínka. Pokud je pravdivá, pokračuje se následujícím bodem 3. pokud není pravdivá, cyklus skončí a PHP pokračuje za cyklem for
- Vykoná se „příkaz, který se bude cyklicky opakovat“ a hned poté se vykoná „příkaz, který se vykoná po každém cyklu“. Pokračuje se znovu bodem 2.
Kód cyklu for (i když je nejsložitější) má velmi jednoduchý kód. Příklad:
<?php
for ($i=1; $i<=5; ++$i)
echo $i, ' ';
?>
Popis:
- Nejdříve se vykoná počáteční příkaz (inicializace proměnné). Je to první příkaz v závorce. V tomto případě to je přiřazení proměnné $i na číslo 1.
- Pak se otestuje podmínka, v tomto případě se testuje, zda je proměnná $i menší nebo rovna číslu 5. Pokud je podmínka pravdivá, pokračuje se vykonáním příkazu, který se bude cyklicky opakovat (skript), v tomto případě tedy vypsáním proměnné $i.
- Dále se pokračuje příkazem, který se vykoná po každém cyklu (operace), v tomto případě je to inkrementace – zvětšení hodnoty o jednu.
- Následuje opakování cyklu, tedy otestuje se podmínka atd… Jakmile je testovaná podmínka nepravdivá, okamžitě cyklus končí a PHP pokračuje až za cyklem for.
- Jak již bylo zmíněno, tento cyklus se především využívá v případě, že víte, kolikrát se má daná operace provádět. Např. zákazník v e-shopu může stáhnout tři soubory zdarma. Další už budou placené… apod.
Konstrukce switch Konstrukce switch slouží k testování (porovnáváním) hodnoty proměnné se zadanými hodnotami. Příklad:
<?php
$zeme = 'cz';
// Textový řetězec (v tomto případě zkratka cz) je přiřazena do proměnné $zeme
switch ($zeme) {
case 'cz':
echo 'Česká republika';
case 'sk':
echo 'Slovenská republika';
case 'pl':
echo 'Polsko';
}
?>
Vysvětlení: Textový řetězec (v tomto případě zkratka cz) je přiřazena do proměnné $zeme. Konstrukce switch začne porovnávat obsah proměnné $zeme s jednotlivými hodnotami uvedenými u větví case. V tomto případě je to postupně cz, sk a pl. Jakmile PHP narazí na shodnou hodnotu, vykoná příkaz v dané větvi case. V našem případě je to vždy vypsání daného textového řetězce. Protože v proměnné máme hodnotu ‘cz‘, ve výsledku se vypíše Česká republika. Protože uvedený příklad funguje tak, že i po vyhledání shodné hodnoty nadále PHP pokračuje v porovnávání a hledání hodnot dalších větví case, musí se doplnit konstrukce switch o příkaz break. Příklad:
<?php
$zeme = 'cz';
// Textový řetězec (v tomto případě zkratka cz) je přiřazena do proměnné $zeme
switch ($zeme) {
case 'cz':
echo 'Česká republika';
break;
case 'sk':
echo 'Slovenská republika';
break;
case 'pl':
echo 'Polsko';
break;
}
?>
Jakmile PHP v konstrukci switch narazí na break, další příkazy se již nevykonají a PHP se tak „nezdržuje“ s testováním dalších větví case a pokračuje až za konstrukcí switch. Další variantou je, že PHP při testování nenalezne žádnou shodnou hodnotu ve větvích case. Pro tento případ se vkládá další větev s názvem default. Příklad:
<?php
$zeme = 'cz';
// Textový řetězec (v tomto případě zkratka cz) je přiřazena do proměnné $zeme
switch ($zeme) {
case 'cz':
echo 'Česká republika';
break;
case 'sk':
echo 'Slovenská republika';
break;
case 'pl':
echo 'Polsko';
break;
default:
echo 'Nejste z České republiky, ze Slovenska ani z Polska';
}
?>
Ještě můžeme konstrukci switch „vylepšit“ o vykonání příkazu pro určitou skupinu. Příklad:
<?php
$zeme = 'cz';
// Textový řetězec (v tomto případě zkratka cz) je přiřazena do proměnné $zeme
switch ($zeme) {
case 'cz':
case 'sk':
case 'pl':
echo 'Střední Evropa';
break;
// Země patřící do Střední Evropy
case 'gb':
case 'fr':
echo 'Západní Evropa';
break;
// Země patřící do Západní Evropy
default:
echo 'Nejste ze Střední ani Západní Evropy';
break;
}
?>
- Základní údaje
- Kategorie: PHP
- Zobrazení: 298
Pole si můžeme představit jako množinu dat, které vzájemně nějak souvisí. Například abeceda, skupina čísel, názvy ovoce, skupina žáků ve třídě apod. Jedná se o prostředek pro hromadné zpracování dat. Jinak řečeno, pole je místem, do kterého můžeme uskladnit libovolné množství dat. A to do slova. Tedy velikost pole je závislá pouze na velikosti dostupných prostředků počítače (velikost paměti, databáze...). Vytváření pole Pole se vytváří za pomoci konstrukce array. Příklad:
<?php
$cisla = array(1,2,3);
// Vytvoření pole, do kterého budou uložena tři čísla: jednička, dvojka a trojka.
var_dump($cisla);
// Vypsání celého pole. Výpis bude vypadat takto: // array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
?>
V poli můžeme používat i různé kombinace datových typů, např. místo dvojky můžete vložit text „dvojka“ (vyzkoušejte si to). Práce se záznamy v poli Se záznamy v poli se dá různě pracovat. 1. Sečtení počtu záznamů v poli Pro sečtení celkového počtu záznamů v poli existuje jednoduchá funkce count. Příklad:
<?php
$pole = array(10,20,30,40);
// Vytvoření pole, do kterého budou uložena čtyři čísla
$pocet = count($pole);
// Funkce count zde zjišťuje počet údajů v poli $pole. Protože pole $pole obsahuje čtyři údaje, funkce count vrátí čtyřku. Proměnná $pocet tedy bude obsahovat čtyřku.
echo $pocet;
// Vypíše: 4
?>
Tato funkce se velmi často používá. Příklad – vypsání celkového počtu záznamů v návštěvní knize, celkový počet záznamů ve fotogalerii apod. 2. Hledání v poli
Aby bylo možné se záznamy v poli pracovat, je nutné, aby byl každý záznam nějak identifikovatelný (každý záznam má své pojmenování). To se děje vlastně automaticky a to tak, že každý ze záznamů má podle toho jak byl do pole uložen své pořadí. V PHP tomu říkáme index. Pořadí či index je v PHP (ale i v jiných prog. jazycích) počítáno od nuly. Tedy první záznam má index nula druhý jedna, třetí dva atd... Příklad:
$pole = array(10,20,30,40);
//desítka má index nula, dvacítka má index jedna, třicítka má index dva…
Pro práci s indexi používá PHP hranatých závorek. Např. – [2] (klávesová zkratka pravý Alt+F a G)
Příklad:
<?php
$pole = array(10,20,30,40);
// Vytvoření pole, do kterého budou uložena čtyři čísla
var_dump($pole[1]);
// Vypíše: int(20),
?>
3. Změny záznamů v poli Velmi jednoduchým způsobem můžeme také jednotlivé záznamy v poli měnit. Příklad:
<?php
$pole = array(1,2,3,4,5);
// Vytvoření pole, ve kterém bude uloženo pět čísel. Jednička má index nula, dvojka má index jedna, trojka má index dva, čtyřka mí index tři a pětka má index čtyři.
var_dump($pole);
// Vypíše celé array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
echo '<br>';
//další záznamy budou na novém řádku
$pole[3] = 10;
// Změna prvku v poli, který má index tři. Na tomto indexu byla původně čtyřka, teď jsme tam uložili namísto ní desítku. Pole teď vlastně obsahuje čísla: 1,2,3,10,5.
var_dump($pole);
// Vypíše array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(10) [4]=> int(5) }
?>
4. Přidávání nových prvků do pole Pokud do pole potřebujeme přidat nový záznam, máme k dispozici dva způsoby – přidání nového záznamu automaticky, tedy na konec pole nebo tak, že rovnou napíšeme, jáký index záznamu dáváme. Příklad, kdy vytváříme nový index 2 a do něj vkládáme hodnotu 30:
<?php
$pole = array(1 => 20, 3 => 40, 6 => 70);
// Vytvoření pole, ve kterém budou uložena tři čísla
echo $pole[1];
// Vypíše: 20, protože index 1 má číslo 20
$pole [2] = 30;
// Vytvoření záznamu s indexem 2 a vložení čísla 30 do tohoto indexu
var_dump ($pole);
// Vypíše: 20array(4) { [1]=> int(20) [3]=> int(40) [6]=> int(70) [2]=> int(30) }
?>
Všimněte si, že nový záznam je vypsán až jako poslední i když to neodpovídá číselné posloupnosti. Druhým způsobem je vkládání nového záznamu bez udání indexu. Stačí vložit jen prázdné hranaté závorky:
<?php
$pole = array(1 => 20, 3 => 40, 6 => 70);
// Vytvoření pole, ve kterém budou uložena tři čísla
echo $pole[1];
// Vypíše: 20, protože index 1 má číslo 20
$pole [] = 30;
// Vytvoření záznamu s indexem 7 a vložení čísla 30 do tohoto indexu
var_dump ($pole);
// Vypíše: 20array(4) { [1]=> int(20) [3]=> int(40) [6]=> int(70) [7]=> int(30) }
?>
V tomto případě se PHP podívá na největší existující index a nově vkládanému přiřadí index o číslo větší. Tedy v tomto případě 7. 5. Ovlivňování indexů Indexy v poli můžeme i my sami ovlivnit a to zápisem: index => hodnota PHP neklade žádná omezení, indexy můžete tvořit i napřeskáčku. Např.:
<?php
$pole = array(7 => 20, 6 => 30);
// Vytvoření pole, ve kterém budou uložena dvě čísla, a to dvacítka a třicítka.
// Index 5 má dvacítka a index 6 má třicítka.
echo $pole[6];
// Vypíše: 30
?>
6. Řetězce jako indexy Indexy můžeme mít i v podobě textových řetězců. Příklad:
<?php
$pole = array('jednička' => 1, 'dvojka' => 2);
// Vytvoření pole, ve kterém budou uložena dvě čísla, a to jednička a dvojka.
// Index 'jednička' má uloženo číslo 1 a index 'dvojka' má uloženo číslo 2.
echo $pole['jednička'];
// Vypíše: 1
?>
Mezi indexem pro který je použito celé číslo a indexem, pro nějž je použit řetězec není v principu (z hlediska práce s ním) žádný rozdíl. 7. Procházení polí Pro procházení polí se používá většinou funkce foreach. Existují ještě jiné funkce, ale ty se používají jen velmi zřídka (např. next() a prev()). Funkce (nebo také konstrukce) foreach je vlastně cyklus, který prochází všemi prvky pole a pro každý z nich provede nějakou činnost. Např. jej vypíše. Zjednodušeně to vypadá takto:
foreach (pole as proměnná_pro_každý_prvek_pole)
příkaz_který_se_provede_pro_každý_prvek_pole;
Ve skutečnosti to vypadá následovně:
<?php
$pole = array(1,2,3);
// Vytvoření pole, které obsahuje tři čísla.
foreach ($pole as $hodnota)
echo 'Nalezen prvek s hodnotou: ',$hodnota,'<br>';
// Konstrukce foreach, která prochází pole $pole a hodnotu každého prvku tohoto pole vypíše.
?>
Této konstrukci říkáme procházení bez indexu. Další variantou je procházení s indexem. Ke stávajícímu příkladu vlastně jen přidáme požadavek na výpis indexu:
<?php
$pole = array(1,2,3);
// Vytvoření pole, které obsahuje tři čísla.
foreach ($pole as $index => $hodnota)
echo 'Nalezen prvek s indexem: ',$index,', hodnota: ',$hodnota,'<br>';
// konstrukce foreach, která prochází pole $pole a vypíše jak index daného prvku, tak jeho hodnotu
?>
Pozn.: proměnná $index může mít jakýkoliv název, tedy ne zrovna „index“. To stejné platí pro proměnnou „hodnota“. 8. Prověření existence pole Abychom zjistili, jestli v nějakém poli existuje určitý prvek, použijeme funkci in_array(). Příklad:
<?php
$jmena = array("Petr", "Jan", "Gustav", "Pavel");
if (in_array("Jan", $jmena))
{
echo "Jan je mezi jmény";
}
else
{
echo "Jan mezi jmény není";
}
?>
9. Přidání a odebrání prvku pole Přidání na začátek pole Jak je popsáno výše, pokud přidáme do pole nový prvek, vždy se zařadí na konec - tedy zařadí se jako poslední. Pokud ale chceme, aby se zařadil jako první, můžeme k tomu využít funkci array_unshift(). Příklad:
<?php
$jmena = array("Adam","Bára","Tomas");
echo ($jmena[0]." ".$jmena[1]." ".$jmena[2]);
echo "<br>";
array_unshift($jmena,"Karel");
echo ($jmena[0]." ".$jmena[1]." ".$jmena[2]);
?>
V tomto příkladu vidíte, že na počátku má pozici 0 v poli jméno Adam. Po přidání nového jména Karel se toto jméno zařadí funkcí array_unshift na začátek, tedy místo jména Adam. Ostatní prvky pole se posunou. Odebrání prvního prvku pole Pokud použijeme funkci array_shift, pak se naopak první prvek v poli smaže a ostatní prvky pole se posunou o pozici vpřed:
<?php
$jmena = array("Adam","Bára","Tomas");
echo ($jmena[0]." ".$jmena[1]." ".$jmena[2]);
echo "<br>";
array_shift($jmena);
echo ($jmena[0]." ".$jmena[1]);
//pozice 2 není vypsána, protože neexistuje a skript by vypsal chybu
?>
Přidání na konec pole Velmi podobně se používá funkce array_push:
<?php
$jmena = array(1 => "Adam", 3 => "Dan", 6 => "Karel");
print_r($jmena);
echo "<br>";
array_push($jmena,"Hana");
print_r($jmena);
?>
Odebrání prvku z konce pole Pokud potřebujeme odebrat poslední prvek pole, použijeme funkci array_pop:
<?php
$jmena = array(1 => "Adam", 3 => "Dan", 6 => "Karel");
print_r($jmena);
echo "<br>";
array_pop($jmena);
print_r($jmena);
?>
10. Přidání a odebrání více prvků pole Rozšíření pole Pomocí funkce array_pad můžeme prvky pole rozšířit jak na začátku (záporné hodnoty), tak na konci (kladné hodnoty). Tato funkce má však 3 parametry. Syntaxe funkce:
array_pad(pole, množství, prvky)
Jako množství se udává celkový počet prvků, které bude pole tvořit po přidání. Parametr prvky je hodnota, která bude do celkového počtu vytvořena na zbývajících indexech pole. Příklad:
<?php
$jmena=array("Adam","Dan","Karel");
print_r(array_pad($jmena,6,"Vaclav"));
?>
Výsledkem bude, že celkový počet prvků v poli bude 6 a poslední 3 budou mít stejnou hodnotu - Václav. Načtení prvků Hromadně můžeme načíst prvky pole za pomoci funkce array_slice. Tato funkce má 4 parametry:
array_slice(pole, pozice, délka, zachování indexů)
Pozice znamená číslo indexu, od kterého se mají začít načítat hodnoty prvků. Délka je nepovinný údaj. Pokud se uvede, znamená to počet indexů, které se mají od pozice načíst. V případě, že není uvedena, načtou se všechny prvky až do konce. Zachování indexů je parametr, který má dvě hodnoty - false nebo true. Pokud použijeme ano, tedy true, zachovají se původní hodnoty indexů daných prvků. Hodnota false je defaultní a je zbytečné ji udávat. Znamená to tedy, že nově vytvořený seznam prvků má novou (svoji) indexaci:
<?php
$jmena=array("Adam","Dan","Karel","Bára","Josef", "Tomáš");
print_r(array_slice($jmena,2,2));
//načetli jsme prvky od pozice 2 v počtu 2. Indexy jsou vytvořeny znovu.
echo "<br>";
print_r(array_slice($jmena,2,2,true));
//načetli jsme prvky od pozice 2 v počtu 2. Indexy se zachovaly z původního číslování pole.
?>
Nahrazení prvků Pro nahrazování prvků pole se používá funkce array_splice. Základní syntaxe:
array_splice(pole, pozice, délka, nahrazující prvek)
Nahrazení je provedeno tak, že se od pozice XY (parametr pozice - např. od pozice 2) v délce XY (délka je počet indexů - např. 3) nahradí prvky původního pole nahrazujícími prvky (většinou definované v proměnné).
<?php
$jmena=array("Adam","Dan","Karel","Bára","Josef", "Tomáš");
print_r($jmena);
echo "<br>";
$jmena2=array("David","Petr","Jan");
array_splice($jmena,2,3,$jmena2);
//Jména Karel a Bára budou nahrazeny novými jmény David, Petr a Jan
//Jedná se o pozice od č.2 v počtu 3. Nová jména jsou načítána z proměnné jmena2
print_r($jmena);
?>
Odstranění prvků Odstranění prvků se provede stejnou funkcí, jen vynecháme nahrazující prvek:
<?php
$jmena=array("Adam","Dan","Karel","Bára","Josef", "Tomáš");
print_r($jmena);
echo "<br>";
print_r(array_splice($jmena,2,3));
echo "<br>Výsledek po odstranění: ";
print_r($jmena);
?>
V tomto případě budou od pozice 2 (včetně) odstraněny 3 prvky. Zbytek zůstává beze změn, jen zachované prvky změní svůj index (v příkladu dostane jméno Tomáš nově index č. 2). Převedení pojmenovaných indexů na číselné Pokud máme pole, kde máme jednotlivé indexy pojmenované (asociativní pole), můžeme si je jednoduše převést na defaultní - číselné hodnoty funkcí array_values:
<?php
$seznam=array("Jméno"=>"Petr","Věk"=>"41","Bydliště"=>"Znojmo");
print_r(array_values($seznam));
//Výsledek - Array ( [0] => Petr [1] => 41 [2] => Znojmo )
?>
Převedení pojmenování indexů na jednotlivé prvky Pokud jsou jednotlivé indexy pojmenované a tyto názvy potřebujeme dostat do pole jako jednotlivé prvky, použijeme funkci array_keys:
<?php
$auta=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
print_r(array_keys($auta));
//Výsledkem je Array ( [0] => Volvo [1] => BMW [2] => Toyota )
?>
Tato funkce má ještě další dva volitelné parametry - hodnota (value) a kontrola typu (strict). První příklad ukazuje hledání hodnoty indexu čísla "15" bez kontroly typu:
<?php
$cisla=array(15,25,35,45,"15");
print_r(array_keys($cisla,"15"));
//Výsledek je Array ( [0] => 0 [1] => 4 )
//Skript našel číslo 15 na pozici 0 a na pozici 4
?>
Druhý příklad ukazuje hledání hodnoty indexu čísla "15" s kontrolou datového typu. A protože hledaný výraz "15", tedy číslo, uvedené v uvozovkách není číslem, ale textovým řetězcem, není nalezeno na pozici 0, ale jen na pozici 4:
<?php
$cisla=array(15,25,35,45,"15");
print_r(array_keys($cisla,"15",true));
//Výsledek je Array ( [0] => 4 )
//Skript našel výraz "15" pouze na pozici 4. Nově má index 0
?>
Záměna hodnot a indexů Funkcí array_flip zaměníme hodnoty prvků a indexy:
<?php
$pole1=array("a"=>"červená","b"=>"zelená","c"=>"modrá","d"=>"žlutá");
$zmena=array_flip($pole1);
print_r($zmena);
//Výsledek - Array ( [červená] => a [zelená] => b [modrá] => c [žlutá] => d )
?>
Obrácené pořadí prvků Funkce array_reverse slouží k obrácení pořadí prvků v poli:
<?php
$auta=array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota");
print_r(array_reverse($auta));
//Výsledek - Array ( [c] => Toyota [b] => BMW [a] => Volvo )
?>
Sdružení (sloučení) polí Na sloučení polí používáme funkci array_merge. Pozor u asociativních (pojmenovaných) indexů - zde mohou nastat chyby.
<?php
$pole1=array("červená","zelená");
$pole2=array("modrá","žlutá");
print_r(array_merge($pole1,$pole2));
//Výsledek - Array ( [0] => červená [1] => zelená [2] => modrá [3] => žlutá )
?>
PHP disponuje mnoha dalšími funkcemi na práci v poli. Další informace o polích v PHP najdete např. na webu itnetwork.cz nebo např. na w3schools.com
- Základní údaje
- Kategorie: PHP
- Zobrazení: 562
Funkce v PHP dělíme na dvě základní skupiny – vestavěné a uživatelské.
Vestavěné funkce
Samotné PHP obsahuje doslova tisíce funkcí, které můžete libovolně používat ve svých skriptech. Těmto tedy říkáme vestavěné funkce. Jedním ze základních příkladů je funkce phpinfo:
<?php
phpinfo();
?>
Tato vestavěná funkce nám například vypíše kompletní informace o PHP serveru. Funkci můžeme přidat také určité parametry. Ty jsou umístěny v závorkách za názvem funkce. Příklad:
<?php
print('ahoj');
// V tomto případě pouze vypíše ahoj.
?>
Dále může funkce tzv. něco vracet (například vypisovat).
<?php
$cislo = pi();
// Proměnná $cislo bude obsahovat číslo pí
echo $cislo;
// Výpis čísla pí
echo '<br />';
// Zařídí, aby se další vypsalo na nový řádek
echo pi();
// Číslo pí je možné také vypsat přímo
?>
Nebo příklad z funkcí max:
<?php
$cislo = max(4,1);
// Proměnná $cislo bude obsahovat největší číslo z čísel 4 a 1.
echo $cislo;
// Výpis hodnoty proměnné $cislo
echo '<br>';
// Zařídí, aby se další číslo vypsalo na nový řádek. I tuto funkci můžeme vypsat takto:
echo max(4,1);
// Vypíše největší číslo z čísel 4 a 1
?>
Příklad využití vestavěné funkce náhodného čísla - mt_rand (elektronická verze házecí kostky) Funkce mt_rand vrací náhodné číslo. Má 2 parametry, a to minimální a maximální číslo z rozsahu, který má vrátit. V tomto případě 1 až 6.
<?php
$nahodne_cislo = mt_rand(1,6);
switch ($nahodne_cislo) {
case '1':
echo 'Padlo číslo 1';
break;
case '2':
echo 'Padlo číslo 2';
break;
case '3':
echo 'Padlo číslo 3';
break;
case '4':
echo 'Padlo číslo 4';
break;
case '5':
echo 'Padlo číslo 5';
break;
case '6':
echo 'Padlo číslo 6';
break;
}
?>
Seznam všech vestavěných funkcí PHP lze najít v oficiálním manuálu PHP - http://php.net nebo např zde - http://php.baraja.cz/
Uživatelské funkce
Pro vytváření uživatelských neboli vlastních funkcí se používá klíčové slovo funkcion. Za klíčovým slovem funkcion následuje název (jméno) funkce, které si sami zvolíme. Zjednodušeně to vypadá následovně:
<?php
function jmeno_funkce()
{
telo_funkce;
}
?>
Nyní si zkusíme konkrétní jednoduchý příklad, kde se pouze vypíše pozdrav Ahoj:
<?php
function vypis()
// Zde jsme vytvořili funkci s názvem vypis. Dále následuje její tělo. V tomto případě je to pouze příkaz k vypsání slova Ahoj
{
echo 'Ahoj';
}
vypis();
// Zde voláme funkci s názvem vypis. V tomto případě provede vypsání slova Ahoj.
?>
Uživatelské funkce s parametry
Další příklad ukazuje složitější funkci s parametry:
<?php
// Deklarace a definice funkce:
function TretiMocnina($Cislo)
{
$Vysledek = $Cislo * $Cislo * $Cislo;
return $Vysledek;
}
// Volání funkce TretiMocnina():
echo TretiMocnina(5); // Vypíše: 125
?>
Nejprve je vytvořena funkce s názvem TretiMocnina. Ta obsahuje parametr, který v tomto případě tvoří novou proměnnou s názvem $Cislo. V tělu funkce následuje operace, kdy vytvoříme novou proměnnou s názvem $Vysledek. Tomu je přiřazena operace, která násobí třikrát za sebou proměnnou $Cislo (protože chceme tvořit třetí mocninu, což je trojnásobek). Na dalším řádku máme slůvko returt což je příkaz, který nám vrací hodnotu proměnné $Vysledek. Následuje příkaz echo, který vypíše hodnotu proměnné TretiMocnina s parametrem 5. Neboli do proměnné $Cislo dosadíme tímto číslo 5, které se následně třikrát po sobě vynásobí a vytvoří tedy třetí mocninu. Další příklad ukazuje, že funkci můžeme ve skriptu použít, kolikrát chceme. Což se velmi často používá:
<?php
// Deklarace a definice funkce:
function TretiMocnina($Cislo)
{
$Vysledek = $Cislo * $Cislo * $Cislo;
return $Vysledek;
}
// Volání funkce TretiMocnina():
echo TretiMocnina(5); // Vypíše: 125
?>
Další ukázka uživatelské funkce (zdroj http://php.vrana.cz):
<?php
// Vrácení českého názvu měsíce
function cesky_mesic($mesic) {
static $nazvy = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
return $nazvy[$mesic];
}
echo cesky_mesic(date("n")) . "\n";
// Vrácení českého názvu dne v týdnu
function cesky_den($den) {
static $nazvy = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota');
return $nazvy[$den];
}
echo cesky_den(date("w")) . "\n";
?>
Pozn.: znaky \n se v PHP používají pro odřádkování v kódu. Nikoliv ve webové stránce! Pro tu se musí použít klasické <br>
Globální a lokální proměnné
Jakákoliv proměnná, která je použita mimo jakoukoliv funkci, se v PHP nazývá globální proměnná. Zato ta, která je použita uvnitř funkce se nazývá lokální proměnná. Tyto proměnné se navzájem nijak nemíchají a jsou jakoby oddělené. Příklad:
<?php
$x = 4;
// Globální proměnná $x nastavena na 4.
function vypis_x()
{
echo $x;
// Tohle je pokus o výpis lokální proměnné $x.
}
echo vypis_x();
?>
Po spuštění dostanete asi toto chybové hlášení: Notice: Undefined variable: x in C:\wamp\www\index.php on line 7 Jde o to, že uvnitř funkce s názvem vypis_x se pokoušíme příkazem echo vypsat proměnnou $x. Takováto proměnná ale uvnitř této funkce neexistuje. Nachází se totiž mimo tuto funkci, tak že ji tento příkaz echo uvnitř funkce marně zkouší vypsat. Proměnná $x sice ve skriptu existuje, ale je je to globální proměnná, na kterou „zevnitř“ funkce nevidíme.
Poznámky k funkcím
- Funkce muže mít více vstupních parametrů. Ty se pak oddělují čárkou.
- Funkce v PHP mohou předávat parametry odkazem. To se provede tak, že před název proměnné v hlavičce funkce se uvede ampersand (&)
- V těle funkce mohou být definovány proměnné s klíčovým slovem static. Hodnotu takových proměnných si PHP mezi jednotlivými voláními funkce pamatuje.
- Funkce v PHP mohou být rekurzivní. To znamená, že funkce muže volat sebe samu.
- Funkce nemůže vracet více než jeden výstupní parametr. Ale muže vracet pole, takže se to dá obejít.
- Jedna uživatelská funkce muže volat jinou. Na pořadí, v jakém jsou uvedeny ve skriptu, přitom nezáleží. Volání funkce muže být uvedeno dokonce již dříve než definice funkce samotné.
- Základní údaje
- Kategorie: PHP
- Zobrazení: 525
Pro vkládání souborů do kódu se používají funkce include, require, include_once, require_once. Základní rozdíl mezi funkcí include a require je v tom, že pokud funkce include volá soubor, který neexistuje, vypíše chybové hlášení, ale pokračuje ve skriptu. Kdežto funkce require skončí fatální chybou. Funkce include_once a require_once se používají v případě, kdy potřebujeme zamezit vícenásobnému vložení stejného externího souboru. Varianty s _once na konci zaručí, že se v případě vícenásobného použití stejného souboru vloží jen ten první. Nejčastěji se ovšem používá funkce include.
Příkaz include
Příkaz include je základní příkaz, kterým je možné do skriptu PHP vložit jiný skript PHP. Typické je to např. v případě vkládání menu webových stránek, kdy je takovéto menu uloženo v jednom souboru a ostatní si jej pouze vkládají v podobě funkce include. Při změně menu se tak nemusejí pracně jednotlivé stránky měnit a automaticky načítají novou podobu takového menu. Pro začátek vložíme do stránky jinou, která obsahuje adresu. Nejprve vytvoříme soubor s adresou:
<em>Kontakt:</em><br />
<strong>Jaroslav Novák</strong><br />
Holická 33<br />
111 11 Počernice<br />
e-mail: jaroslav.novak[zavináč]firmaxy.cz<br />
tel.: 123 456 789<br />
Tento soubor načítá adresu funkcí include:
<html>
<head>
<title>Příklad na include</title>
<meta charset='utf-8'>
</head>
<body>
<p>Tady je vlastní text stránky.</p>
<?php
include 'adresa.php';
?>
</body>
</html>
Pomocí příkazu include je možné vložit cokoliv, teda i kód PHP. Např.:
<?php
echo 'Tady je kousek PHP kódu<br />';
?>
Počet vložení externího souboru do kódu pomocí funkce include není omezen.
Když vkládaný soubor chybí
Pokud vložený soubor neexistuje, vypíše PHP chybové hlášení (ovšem záleží na nastavení serveru). Např: Warning: include(test-include.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\adresa.php on line 9 V praxi se samozřejmě příkazy pro vložení externího souboru využívají v daleko větší míře a především s následným zapojením databáze. Další jednoduchý příklad ukazuje, jak lze "poskládat" webovou stránku tak, abychom si při vytváření dalších nových stránek webu ulehčili práci. Nejprve je dobré si vytvořit jednotlivé části webu, které se nebudou v celém systému webových stránek měnit. Jedná se např. o hlavičku dokumentu, menu, zápatí apod. Tak že např. zahlavi.php, menu.php a paticka.php. Následné složení stránky může vypadat např. takto:
<?php
include ("hlavicka.php");
include ("menu.php");
?>
Zde bude unikátní část webu, na každé stránce jiný...
<?php
include ("paticka.php");
?>
Každá část webu pak musí vypadat takto, pouze unikátní část html kódu se bude lišit. Dalším vylepšením bude to, že si každou tuto "unikátní část webu" budeme chtít načítat např. z databáze. Pak nám bude stačit pouze jeden soubor (např. index.php). Další stránky nebudeme potřebovat, protože hlavní ("unikátní") část webu se bude dynamicky načítat podle toho, jakou budeme "volat" stránku. K tomuto účelu se využívá metoda _GET, která dokáže přidat do adresy URL jakoukoliv hodnotu (parametr) a tím "zavolat" patřičný obsah. Nejprve začneme jednoduchým vložením externího souboru za pomoci funkce require. Napojení do databáze si vyzkoušíme až po prostudování kapitoly o databázích.
<html>
<head>
<title>Příklad na vkládání externích souborů</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Menu:</h1>
<ul>
<li><a href="/php?layout=blog&stranka=uvod&start=8">Úvod</a></li>
<li><a href="/php?layout=blog&stranka=reference&start=8">Reference</a></li>
<li><a href="/php?layout=blog&stranka=kontakt&start=8">Kontakt</a></li>
</ul>
<?php
echo "<p>Dynamický obsah:</p>";
require($_GET['stranka'] . '.php');
?>
</body>
</html>
Jak pracuje metoda _GET s parametrem Pro pochopení si nejprve všimněte jednotlivých položek menu. Odkazy jednotlivých položek mají adresu index.php?stranka=xxx. Tato konstrukce (tvar) adresy funguje tak, že do následně volané metody _GET v kódu PHP se doplní právě parametr, který vidíme za rovnítkem. Tedy např. slovo kontakt. Tím, že k tomuto slovu ještě připojíme (tečkou) příponu .php se načte do tohoto místa tento externí soubor. Pokud tedy existuje.
require($_GET['stranka'] . '.php');
Vytvořte tedy podle tohoto příkladu startovací stránku webu - index.php a dále tři "podstránky" - uvod.php, reference.php a kontakt.php. Zde je demo. Po kliknutí na jednotlivé položky sice vše funguje, ale základní startovací stránka webu - index.php vykazuje chybu. Proto je potřeba doplnit skript o podmínku, která kontroluje, zda je v adrese nějaký parametr:
<html>
<head>
<title>Příklad na include</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Menu:</h1>
<ul>
<li><a href="/index.php">Úvod</a></li>
<!-- Zde již můžeme nechat pouze odkaz na index.php -->
<li><a href="/php?layout=blog&stranka=reference&start=8">Reference</a></li>
<li><a href="/php?layout=blog&stranka=kontakt&start=8">Kontakt</a></li>
</ul>
<?php
echo "<p>Dynamický obsah:</p>";
if (isset($_GET['stranka']))
// pokud je něco v parametru adresy URL, pak tento parametr načti.
require($_GET['stranka'] . '.php');
else
// Pokud ne, načti následující kód.
echo "Toto je obsah titulní strany webu..."
?>
</body>
</html>
Podmínka "kontroluje" zda je v parametru URL adresy nějaký text. Pokud ano, vypíše jej. Pokud ne, vypíše se část else podmínky. Tady je výsledek. Pokuste se takovýto příklad vložit do stránky s nějakým frameworkem (např. Bootstrap...)
Další příklad možného řešení: DEMO | Celý web ke stažení (pro zvýraznění položky aktivního menu, je použit script podle kapitoly 25)