Učíme se PHP online a nekupujem knihy :o)

>> Pro všechny, kdo mají rádi tento jazyk nebo pro ty, kteří se v něm chějí zdokonalit.



Lekce 5: Pole




- Věřte, že samotné proměnné vám za chvíli stačit nebudou a budete chtít hodnoty někam ukládat. Máme tu 3 možnosti. První možností jsou pole, o kterých je tato lekce, potom soubory a databáze.
- Možnosti 2 a 3 si projdem taky, ale to až jindy.


Vysvětlení úkolu 4 z lekce 4 a typu array


- V předešlé lekci ve 4. úkolu jsme už lehce nakousli pole. Jak jsem už říkal, tak PHP si samo určuje o jaký typ se jedná a tím typem může být i pole, čili array.

$jmeno = "Franta";

echo $jmeno; // vypise nam cely string "Franta"

// vezme promennou $jmeno jako pole a vypise nam pismeno na 0. pozici
echo $jmeno[0]; // F

// tento jednoduchy cyklus vypise jednotlive pismena v promenne tak,
// jako kdyby to bylo pole
for ($i = 0; $i < strlen($jmeno); $i++) echo $jmeno[$i]; // Franta
- Jednou jsem také zmínil u přetypování typ array, ale nijak jsem ho nevysvětlil a právě teď je vhodný čas.
- Jak jistě už víme, tak typ array značí pole, takže pokud proměnnou přetypujem na tyto typ, tak vznikne nové pole.
$jmeno = "Lucka"; // typ string s hodnotou "Lucka"

$jmeno = (array) $jmeno; // ze stringu se stane pole
echo $jmeno[0]; // pokud chci vypsat Lucku, tak musim pouzit index v poli

$jmeno[] = "Petra"; // nyni muzu do existujiciho pole pridat dalsi osobu
echo $jmeno[1]; // vypisu "Petra"
- Pokud tomu ještě moc nerozumíte, tak nevadí. Čtěte dál a tam to rozeberu trochu podrobněji.


Tvorba polí


- Jak vytvořit pole? K tomu nám slouží klíčové slovo array. Ale než začneme, tak se naučíme další příkaz count, a sizeof, který slouží podobně jako strlen, jen s tím rozdílem, že zjišťují velikost pole (počet prvků).

$pole = array(1,2,3,4,5); // vytvorime promennou $pole o 5 hodnotach
$velikost = count($pole); // zjisti pocet prvku pole = 5
$velikost = sizeof($pole); // tez zjisti velikost pole = 5

// vypiseme obsah pole
// vypis: 12345
for ($i = 0; $i < $velikost; $i++) echo $pole[$i];
- Lze také vytvořit pole bez použití klíčového slova array a to tak, že za název proměnné dáme []. Tím docílíme toho, že typ proměnné se nastaví na jednorozměrné pole.
$arr[] = "Ahoj"; // v poli na pozici 0 bude slovo "Ahoj"
Pozor: Pokud chceme do pole přidat další hodnotu, tak NEpoužijeme operátor .=, ale jen =.
$arr[] = "Světe"; // v poli na pozici 1 bude slovo "Světe"
- Naše pole $arr má tedy 2 hodnoty. Může se někdy stát, že budete potřebovat vypsat nějaký znak z nějaké hodnoty v poli, ale jak vidíte, tak pole není typu string, ale to nevadí, je to úplně ten samí postup. Opět dodáme v jaké hodnotě a jaký index se má vypsat.
echo $arr[0][0]; // vypisem z hodnoty "Ahoj" znak na 0. pozici -> "A"
echo $arr[1][2]; // vypisem z hodnoty "Světe" znak na 2. pozici -> "ě"
Poznámka: Pole vždy začíná od indexu 0, takže znak na pozici 2 je ve skutečnosti až 3.

- Jak můžete vidět, tak se dostáváme k vícerozměrným polím. Vícerozměrné pole je to samé, jen obsahuje pole polí.
- Deklarace pole vypadá stejně.
$foo = array(); // deklarace prazdneho pole (neresi velikost pole, jen typ)

// vytvori nam prvni pole, ktere bude mit 2 hodnoty a ty hodnoty budou dalsi pole
// a kazde "vnorene" pole bude mit 3 hodnoty
$foo = array
(
  array(1,2,3.5),
  array(4,5,"text")
);
Poznámka: Deklarace prázdného pole není nutná, protože typ se zjistí automatick při prvním použitím proměnný.

- Už to začíná být zajímavé že? Jak se teď ale k hodnotám dostat? Možností je více, ale ukážem si zatím 2.
// prvni metoda je lehka, pres index
echo $foo[0][1]; // vypise 2
echo $foo[1][2]; // vypise "text"

// pokud by jsme chteli vypsat nejaky znak z "text"
// tak opet pridame dalsi pole, kde jsou ulozeny jednotlive znaky
echo $foo[1][2][2]; // vypise "x" ze slova "text"

// druha metoda je pres 2 cykly, kde prvni cyklus projizdi pole poli a
// druhy prochazi jednotlive pole
for ($i = 0; $i < count($foo); $i++)
{
  // zde musime zjistit velikost vnitrniho pole uvnitr pole
  for ($j = 0; $j < count($foo[$i]); $j++)
  {
	echo $foo[$i][$j]; // vypise: 123.545text
  }
}
- Na tomto principu jsou založené matice. Samozřejmě nemusíme tvořit pouze dvojrozměrné pole, lze i víc, ale to už moc nedoporučuji. Maximální je právě dvojrozměrné, možná ještě tří, ale pokud máte víc, tak veřte, že váš způsob je špatný způsob.

- Dejme si příklad, že máme pole polí v poli a každé to pole má řekněme 30 hodnot. Takže celý cyklus se bude procházet 30*30*30 = 27000! a to už na načítání stránky je lehce poznat a to přece nechceme.


Dodatek


- Pole můžeme rovněž použít jako klasickou proměnnou. Ta má výhodu v tom, že název proměnné je stejný, jen se mění název pole, kde je uložená výsledná hodnota.

- Výborné využití to má například v proměnných, u kterých víme, že patří k nějakému jistému účelu. Vypůjčím si příklad z databází, kde se toto často používá.

$db["server"] = "localhost";
$db["jmeno"] = "root";
$db["heslo"] = "heslo";
- Z toho vznikne jedno pole, které bude mit místo indexů specifické názvy a hodnoty. Takže pokud budeme chtít vypsat nějakou hodnotu z pole, tak zavolámě proměnnou přesně tak, jak jsme ji nastavili.
echo $db["jmeno"]; // vypise "root"
- Tohle má jen jednu nevýhodu a to tu, že na takové pole nelze použít cyklus for, protože ten očekává právě čísla jako index.
- Na takové pole se používá příkaz foreach, ale o tom později.

- Další užitečný příkaz, který budeme potřebovat, je na vygenerování náhodného čísla a to přes rand(). Syntaxe je jednoduchá, skládá se ze 2 parametrů, kde první označuje od jakého čísla a druhý po jaké číslo.
$gen = rand(1, 9); // vygeneruje cislo od 1 do 9


Dobrovolný domácí úkol


1) Vytvořte matici o velikosti 4x4 a naplňte jí čísly v rozmezí 10 až 99 a vypište tak, aby měla hezký formát matice.

// tento cyklus si bere radky
for ($i = 0; $i < 4; $i++)
{
  // tady se projizdeji sloupce
  for ($j = 0; $j < 4; $j++)
  {
	// do promenne ukladam nahodna cisla
	// nebojte, nezapomel jsem na $j, to se doplni automaticky podle posledniho cyklu
	$matice[$i][] = rand(10, 99);
	echo $matice[$i][$j]."&nbsp;"; // hned vypisu
  }
  echo "
"; // a odradkuju }
2) Opět vytvořte matici o velikosti 8x8, kde se budou generovat pouze sudá čísla v rozmezi 2 až 8. Potom sečtěte všechna čísla v matici a vypište výsledek.
$soucet = 0; // nadeklarujeme si promennou s vychozi hodnotou 0

for ($i = 0; $i < 8; $i++)
{
  for ($j = 0; $j < 8; $j++)
  {
	// pomocny cyklus pro zjisteni, jestli je vygenerovane cislo sude
	do
	{
	  $gen = rand(2, 8);
	}
	while ($gen % 2);
	
	$matice[$i][] = $gen; // vlozi $gen (sude cislo) do matice
	$soucet += $gen; // scita jednotliva cisla v matici
  }
}
echo $soucet;


This page was loaded in 0.403283 seconds. © 2011-2025 by mimic | mimic.php5.cz
ICQ contact is 204-517-399