Autor Zpráva
Someone
Profil
Autor: nakonec Joker
Odkaz na aktuální verzi textu: Základní kurz 9: Pole
zveřejněno
Odkud se vede diskuse k aktuálnímu stavu textu:
První příspěvek po poslední revizi textu

Níže původní obsah příspěvku

Dobrý večer všem. Vzhledem k mé časové vytíženosti jsem velmi rád, že se mi podařilo najít si čas na zpracování kapitoly Pole, o kterou jsem se přihlásil. Nejedná se o finální verzi, spíše jsem to chtěl pojmout tak, aby došlo ke kritice nejen tématu samotného, ale i mého vyjadřování a způsobu, kterým se snažím předat informace. Jsem si vědom toho, že to mnohdy píšu opravdu polopatě (měl bych se mírnit? je to přítěž?), ale jedná se pouze o snahu z mé strany, aby čtenář danou problematiku co nejlépe pochopil. Dále se chci v kapitole zmínit o vestavěných funkcích sloužících pro práci s poli: array_sort(), in_array(), is_array() atd., ale jsou jich spousty a už tak se mi článek dost protáhl a to jsem se sotva dostal přes indexy :). Je to téma, ke kterému se toho dá napsat opravdu hodně, proto se ptám, zda to mám zkrátit, zmínit, že takové funkce existují a případně odkázat a nebo je mám rozebrat. Mimo to se dá povídat i o isset() a empty(), které se na pole dají také praktikovat. Stojí můj projev vůbec za to, aby sloužil jako výukový materiál druhým? Děkuji za každou reakci, připomínku, kritiku ať už kladnou či zápornou.
Jan Tvrdík
Profil
Someone:
Zkopírováno sem, Dropbox neumí zvýrazňovat kód.

měl bych se mírnit?
ano :)

Dále se chci v kapitole zmínit o vestavěných funkcích sloužících pro práci s poli
Moc se nerozepisuj, tohle je primárně téma pro samostatný článek. Z funkcí, které by asi bylo dobré zmínit už tady mě napadá count, in_array a array_key_exists (včetně rozdílu oproti isset a empty).

Teď k vlastnímu článku. Překlepy, gramatiku, typografii a coding standard budu ignorovat.

1) vyhodit „po vědění toužící“
2) vyhodit „a vše s ním spojené“ (protože to není pravda)
3) vyhodit „Abychom se mohli plně věnovat polím (…) musí mít nějaký důvod že?“ (vůbec nic tím nevysvětlíš, v textu se na to dále neodkazuješ).
4) vyhodit „Pokusme se přesunout aspoň trochu z teorie a ukažme si nějaké pole, které všichni jistě známe.“
5) přepsat „Abychom se s poli mohli přesunout do programování, musíme si nejdříve osvojit dva pojmy. “ (nikam se nepřesouváme)
6) opravit a přesunout „Je důležité zmínit, že v PHP se indexuje od nuly, to znamená, že první zásuvka je označena nulou ne jedničkou.“ není pravda (platí pouze za předpokladu, že klíč není explicitně uveden) a pravděpodobně to akorát začátečníka zmate. Přesuň tu informaci radši až za první příklad.
7) vyhodit „Po dlouhé zdlouhavé teorii se můžeme pustit do praxe.“ (teorie nebyla zdlouhavá), případně nahradit něčím rozumnějším (třeba „A teď hurá na první příklad!“)
Tori
Profil
Someone:
Kdybyste vyhodil to "silové pole ze SF", tak za tímto: „Pole je soustava či soubor prvků, které mají nějaké společné znaky.“ máte prima příležitost ty společné znaky pole u lesa vs. sudoku konkretizovat: rozdělení na samostatné díly, které mají nějakou polohu (podle toho je najdeme; místo sudoku by byla lepší šachovnice), a nějakou hodnotu (čím je oseté, jaká šachová figurka tam stojí, jaké číslo v sudoku...). A pak abstraktní příklad s týdnem.

Indexy(klíče), Prvky pole(hodnoty)“ - tady bych nechala obě varianty pojmenování, protože to je poprvé zmíněno. Ale dál („Každá zásuvka má své označení(index) a nějaký svůj obsah(prvek,hodnotu)“, „Prvek je obsah zásuvk“ „zapíší hodnoty (prvky pole):“) bych spíš používala jen jedno pojmenování - závorky trochu narušují plynulost čtení.
Jinak subjektivně "prvek pole" vnímám spíš jako "pár klíč-hodnota", nezaměňovala bych hodnoty a prvky - co na to ostatní?

K těm indexům (je to jen návrh od člověka, co nikdy neučil, takže mě můžete klidně ignorovat):
Možná na začátek prostě pár příkladů s různým počtem prvků:
$prazdnePole = array();
$vikend = array('Sobota', 'Neděle');
$tyden = array('Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota', 'Neděle');
Pak napsat, že PHP si ty prvky automaticky očíslovalo (přidělilo jim indexy), a podle těch můžeme k jednotlivým hodnotám přistupovat [příklad]. Potom napsat, že stejným způsobem můžeme do pole přidávat nové hodnoty ($tyden[7] = 'Příští pondělí';). Potom zápis s $pole[] = 'hodnota'. Možná uvést příklad, že tyhle dvě varianty vytvoří stejné pole, a může se teda použít ta, která je v daném kontextu přehlednější:
$vikend = array('Sobota', 'Neděle');
// anebo
$vikend = array();
$vikend[] = 'Sobota';
$vikend[] = 'Neděle';
Pak vysvětlení, že PHP nepřiděluje index podle počtu prvků, ale podle nejvyššího indexu v poli.
$pole = array();
$pole[3] = 'hodnota';
$pole[] = 'hodnota'; // dostane index 4
$pole[] = 'hodnota'; // dostane index 5
$pole[100] = 'hodnota';
$pole[] = 'hodnota'; // dostane index 101
Potom by následovaly řetězcové klíče s upozorněním, že pokud řetězec obsahuje jen čísla, bere se jako číselný index. A kombinovaný příklad na všechno zatím probrané (ten „Jaké budou indexy u tohoto pole?“).

čemu se říká vícerozměrové pole“ - vícerozměrné. „-rozměrný“ je „mající nějaký rozměr(y)“, „-rozměrový“ znamená „týkající se rozměrů“ (např. „rozměrový a materiálový popis výrobku“).

Polím, které mají textové indexy se říká pole asociativní.“ - asi spíš „mají jen textové indexy“, ne? Možná doplnit, že PHP umožňuje oba typy indexů v jednom poli.

index může být řetězec, číslo nebo i proměnná.“ - možná byste ukázku s klíčem v proměnné mohl začlenit do některého příkladu.
Someone
Profil
Tori, Jan Tvrdík:
Děkuji za nápady a připomínky, pokusím se je v dohledné době zpracovat.
Joker
Profil
Someone:
Došla řada na zveřejnění kapitoly o polích, jak to s ní vypadá?
Someone
Profil
Ten čas ale letí o.O
Do konce týdne zkusím předvést upravenou verzi mého původního článku. Bude to stačit nebo bych to měl urychlit?
Joker
Profil
Someone:
Bude to stačit nebo bych to měl urychlit?
Nejlépe to už rovnou psát na Péhápko.cz.
Jinak čím dříve tím lépe, následující kapitoly jsou už připravené. Případně v 10. kapitole se sice pole zmiňuje, ale jinak není s 9. moc provázaná, takže by ji šlo zveřejnit první.
Ale jestli to bude do konce týdne, spíš zveřejním obě současně.

Mimochodem, když už budou existovat celé tři články od jiného autora než já, založil jsem informativní stránku pro autory.
Joker
Profil
Someone:
Další měsíc a kus pryč, jak to vypadá?

Zveřejním zatím následující kapitolu.
Tomáš123
Profil
Someone:
Ahoj, ospravedlňujem sa, že prispievam do vlákna bez rád o zmene štylistickej stránky textu, či iným cenným radám. Text je napísaný celkom pochopiteľne, ale ako začiatočníkovi mi tam dosť chýba nejaký ozajstný príklad, kedy je pole dobre využiť, kedy sa naopak zdržať a v akých situáciách sa pole najčastejšie využíva. Mohli by ste to do článku doplniť prosím?
Kubo2
Profil
Someone:
Hodila by sa zmienka o možnosti využitia „JavaScriptovej notácie“ tj. $p = [ 1, 2, 3 ]; pre zápis polí od PHP 5.4 (hrm?) vyššie a tiež možnosť ponechať za posledným prvkom poľa prebytočnú čiarku.
Joker
Profil
Mně hlavně chybí ta hotová kapitola, v ZK je kvůli ní díra a poslední 4 měsíce nemám ani žádnou informaci o stavu.
Joker
Profil
Jelikož stále není žádná informace o stavu a jediné co jsem našel byla ta první rozpracovaná verze, sepsal jsem vlastní kapitolu Pole.

Trochu se to rozlezlo a přidal jsem tam i zmínku o superglobálních polích.
S tím původní osnova nepočítala, takže časem ještě upravím kapitolu o předávání dat na server, aby to reflektovala, a možná pár využití $_GET do kapitol mezi nimi.
smiesek
Profil
Joker:
ráda jsem si prošla kapitolu a přinutilo mě to si pohrát s využitím polí, jelikož se snažím pochytit princip fungování php.
Děkuji za ni - je to srozumitelně napsáno.
Tori
Profil
Joker:
- odkaz na kapitolu o dat. typech nefunguje, mřížka je zapsaná entitou
- „ale pokud jsou delší anebo jich je hodně, je lepší je dělit na řádky tak...“ - dalo by se použít i "přehlednější", méně obecné, více vysvětlující
- přehodila bych slova: „Zbývající skalární typy (float a bool) se při pokusu použít je jako klíč pole přetypují se na integer
- možná doplnit: „Hodnoty prvků pole je možné takto číst i zapisovat,“ (vztahuje se k ukázce nad textem).
- „Přiřazení hodnoty do pole na nějaký už existující klíč přepíše hodnotu, která pod tím klíčem v poli byla.“ - nějaká složitá věta, možná bych vyhodila označené
- možná doplnit: „Lze také klíč vynechat a napsat jen prázdné hranaté závorky, v tom případě se vytvoří nový prvek a číselný klíč se mu přidělí automaticky způsobem popsaným výše.
- v ukázce: ... "en"/"pozdrav" a "cs"/"pozdrav chybí uvozovky na konci
- „Toto řešení se používá pro výběr více různých čísel, pokud je potřeba jen jedno náhodné číslo z určitého rozmezí, je lepší použít funkci rand nebo mt_rand“ chybí tečka na konci, a před "pokud je potřeba" bych asi větu ukončila a začala novou (když čtu, vypadá to jako vedlejší věta k té předchozí). Anebo aspoň středník místo čárky.
- chybí čárka: „Dá se odsud zjistit třeba jaký prohlížeč “ --> „Dá se odsud třeba zjistit, jaký prohlížeč
- V části Manipulace s prvky pole bys mohl doplnit, že jako klíč se dá použít i výraz, který vrací skalární hodnotu (např. volání funkce nebo výpočet), používáš to pak v řešení č. 1.
Jan Tvrdík
Profil
pokud jsou delší anebo jich je hodně, je lepší je dělit na řádky tak, jak je znázorněno v příkladu
Zrovna v tom příkladu je to zformátováno dost divně, protože prvky nejsou pod sebou. Navíc to máš v každé ukázce jinak posunuté a zároveň nekonzistentní s tím, jak píšeš třeba if. Výrazně lepší je to podle mě takto:
$zakladniKurz = [
    1 => "Úvod",
    2 => "Co je potřeba?",
    3 => "Nastavení editoru",
    /* atd. */
];

dostane číslo o 1 vyšší, než nejvyšší již existující (nezáporný) číselný klíč
To není úplně pravda, protože ten interní counter není resetován při unsetu. Nově vzniklý prvek by měl tedy obdržet číslo indexu o 1 vyšší, než nejvyšší nezáporný číselný index, který kdy v tom poli existoval.

Není ale důvod se vůbec snažit jiné typy než čísla a řetězce jako klíče v poli používat.
Je, pro objekty se to řeší pomocí spl_object_hash nebo pomocí SplObjectStorage, ale tedy bych to asi nezmiňoval.

Poli, kde klíče nejsou čísla, ale řetězce, se říká asociativní pole.
Já bych řekl, že asociativní je každé pole, kde indexy netvoří nepřerušovanou číselnou řadu začínající od 0. Nebo ještě jinak v neasociativním poli záleží pouze na pořadí prvků, nikoliv však už na hodnotách indexů. Tedy pole [7 => 'a'] je podle mě asociativní.

Pro zjištění, jestli prvek pole existuje, je možné použít příkaz isset
To není pravda, kvůli null hodnotám musíš pro ověření existence použít array_key_exists. Nicméně protože isset je výrazně rychlejší a pro většinu situací dostačující, tak jeho použití je preferováno.

U funkcí dost výrazně chybí funkce in_array.
Joker
Profil
Tak jsem sice opravil ten odkaz jak píše Tori v první odrážce, zato se vymazala poslední část článku.

Jestli někdo máte původní obsah v cache, můžete si to pro jistotu někam uložit, kdyby se mi nepovedlo to obnovit?
Díky.
Marschmallow
Profil
Joker:
Jestli někdo máte původní obsah v cache, můžete si to pro jistotu někam uložit, kdyby se mi nepovedlo to obnovit?
Jestli se Ti to obnovit nepovedlo, nabízím ke stažení zazipovaný Kurz 9 - Pole.
Jan Tvrdík
Profil
Joker:
zato se vymazala poslední část článku
Hlavně, že ten RS umí právě kvůli tomuhle verzování =) Mohl bych zakázat možnost „drobná změna“, pokud se změní víc než určité procentu obsahu. Nebo vytvářet skryté revize i při drobné změně.
Joker
Profil
Jan Tvrdík:
Hlavně, že ten RS umí právě kvůli tomuhle verzování =)

Já si právě řekl, že kvůli opravě jednoho odkazu je zbytečné dělat novou revizi :) A jako na potvoru to byla první oprava po sepsání textu, takže dřívější revize ke které by se šlo vrátit neexistuje.

Marschmallow:
To už je ta ořízlá verze.
Tomáš123
Profil
Joker:
Predvčerom som to prebehol... Keďže posledná správa bola od Tori, možno sa v mojej cache nachádza hľadaný obsah... Neviem však ako sa k nemu dostať. Zatiaľ nečistím, ak sa vám stratený obsah nepodarí obnoviť a budem jediný, kto sa tu ozval, môžte to so mnou skúsiť :-)...

PS: Na konci kapitoly mi chýba "Vyzkoušejte si".
lionel messi
Profil
Ja som si to uložil na disk v origináli hneď po vydaní a vidím, že sa to môže hodiť. Dal som to sem: Živá ukázka (samotný článok je v políčku HTML) — snáď pomôže.
Tori
Profil
Já jsem od té doby už na tu stránku kliknula, takže se mi cache přepsala.
lionel messi
Profil
Tori:
Já jsem od té doby už na tu stránku kliknula, takže se mi cache přepsala.
Aj mne, ale ako píšem [#21] — veľa stránok ukladám na disk, našiel som aj toto. Inak ukážku som upravil, aby bola ako-tak naformátovaná.
Joker
Profil
lionel messi:
Bezva, díky.

Měl by být zpátky původní obsah, plus část úprav podle [#14] Tori. S dalšími opravami budu pokračovat.
Joker
Profil
Tori [#14]:
Snad vesměs opraveno, některé věty jsem úplně přeformuloval.

- možná doplnit: ‚Hodnoty prvků pole je možné takto číst i zapisovat,‘ (vztahuje se k ukázce nad textem).
To nebylo psané k té ukázce, ale jako obecné prohlášení, že hodnoty lze číst i zapisovat.

Jan Tvrdík:
Zrovna v tom příkladu je to zformátováno dost divně
Nojo, v kódu to vypadá jinak. Upravil jsem formátování.

„dostane číslo o 1 vyšší, než nejvyšší již existující (nezáporný) číselný klíč“
To není úplně pravda
Hmm, zvážím, co s tím. Jsem se snažil se způsobem přidělování klíčů (který v drtivé většině použití funguje celkem intuitivně) moc nezdržovat.

Tady to protentokrát ukončím a zbytek zase příště :-)
Joker
Profil
Zapracoval jsem (doufám) zbývající připomínky a zmínka o unsetu v [#15] mi připomněla, že tam vůbec nebyla zmíněna možnost prvky pole mazat (která paradoxně je zmíněna už v kapitole o proměnných), takže jsem přidal i to.
Joker
Profil
Na základě připomínky jinde jsem doplnil (varovný) popis k $_REQUEST.

Vaše odpověď

Mohlo by se hodit

Ostrá verze učebnice běží na www.pehapko.cz.

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: