PHP pole: funkce a hodnota

20. 5. 2019

Na úrovni PHP je pole uspořádaný seznam mapovaný na mapě. Jinými slovy, PHP prostě kombinuje tyto dva koncepty, což vede k poměrně flexibilní, ale na druhé straně ne nejoptimálnější datové struktuře ve srovnání s podobnými možnostmi.

Málokdo ví, že na úrovni C (a na úrovni systému) neexistují žádné matice, které by mohly mít nefixovanou velikost. Pokud tedy vytvoříte pole v C, pak určitě budete muset určit jeho velikost, aby systém mohl určit, kolik volného místa potřebujete k jeho přidělení.

Co je php pole?

php pole

V PHP není třídění pole zdaleka stejné jako u jiných datových úložišť, zde je uspořádané mapování, které určuje korespondenci mezi klíčem a určitou hodnotou. Tento typ pole je optimalizován v několika různých směrech, což vám umožňuje aktivně jej používat přímo jako samotné pole, stejně jako slovník, přednášku, hash tabulku a také pro řadu dalších účelů podle vašeho uvážení. Je třeba poznamenat, že v případě PHP může být hodnota v poli jiné podobné pole. To vám umožňuje vytvářet stromy, stejně jako vícedimenzionální úložiště.

Mezi charakteristické rysy tohoto repozitáře stojí za zmínku, jak snadné je odstranění pole v PHP. V tomto případě je tento postup mnohem jednodušší než u podobných souborových systémů.

Jak je to implementováno v PHP?

multidimenzionální php pole

Pokud vytvoříte zcela prázdné pole, pak se v tomto případě vytvoří pole PHP se specifickou velikostí. Je-li tato hlasitost naplněna a následně se rozhodnete tuto velikost překročit, vytvoří se zcela nové pole, které bude mít dvojnásobnou velikost stávajícího objemu a všechna data budou do něj zkopírována, zatímco staré pole bude zcela zničeno. Tento přístup je standardní.

Ve skutečnosti za účelem implementace pole PHP se používá tradiční struktura dat nazvaná Hash Table. Tato struktura obsahuje ukazatel na poslední a první hodnotu, která je nezbytná pro objednávání polí, a také ukazatel na aktuální hodnotu, která slouží k poskytnutí iterace nad polem. Kromě toho tabulka Hash obsahuje počet položek uložených v souboru pole, pole ukazatele na kbelíky a další důležité údaje.

Proč Hash tabulka?

třídění php pole

Hash Table má dvě důležité funkce - jedná se o samotnou datovou strukturu, stejně jako o vědro (vědro).

Kbelíky ukládají hodnoty samy, to znamená, že každá z nich má svůj vlastní kbelík, ale navíc obsahuje také původní klíč, stejně jako různé ukazatele na předchozí nebo následující buňky, které se používají k organizaci vytvořeného pole, jako v PHP Klávesy mohou jít v jiném pořadí, v závislosti na přání uživatele.

Pokud tedy do pole přidáte nějaký nový prvek, ale tento klíč ještě neexistuje, pod ním bude automaticky vytvořen nový kbelík, který bude přidán do tabulky Hash. A v tomto případě musíte správně pochopit, jak bude multidimenzionální pole PHP tyto buňky ukládat.

Jak získat klíč?

Jak bylo uvedeno výše, systém má specializovanou řadu ukazatelů na kbelíky, přičemž každý kbelík má přístup přes specifický index, který je určen pomocí klíče. Zvuky jsou často poměrně obtížné, ale ve skutečnosti je vše poněkud jednodušší, než se zdá. Klíč lze tedy získat následujícím způsobem:

  • pokud je klíč řetězec, pak je v tomto případě řetězec zašifrován na celé číslo;
  • na přijatý klíč se aplikuje maska, která se rovná velikosti pole mínus 1;
  • Nakonec lze tento klíč použít jako index, aby bylo možné z pole vyčíslit požadovaný ukazatel do koše.

O masce: například datové pole obsahuje čtyři různé prvky, pak se maska ​​bude rovnat třem. Nyní, pokud jako klíč získáte číslo jako 123, pak v tomto případě po použití masky bude přijato 3 a toto číslo již může být použito jako index.

Jak se vypořádat s kolizemi?

php výstup pole

Vědra mají několik důležitých funkcí, které je třeba znát. Každý kbelík má ukazatel na další a předchozí s rovnými indexy. Takže kromě hlavního dvojitě spojeného seznamu, který prochází všemi používanými kbelíky, existují také dva malé dvojité propojené seznamy mezi lopatkami, které mají stejný index.

Co se stane po úplném zaplnění použitého pole, se nazývá rehash mezi specialisty. V podstatě jde o iteraci nad všemi použitými kbelíky, stejně jako s přiřazením sousedů a přidáním odkazů k nim.

Jak získat položku klíčem?

php array element

Postup je zpočátku stejný jako v případě získání klíče, ale v tomto případě je pokračování:

  • V případě, že klíč je řetězec, řetězec je šachován na celé číslo.
  • Po obdržení numerického klíče se použije maska, která se neustále rovná velikosti pole.
  • Na indexu je kbelík vytáhnut.
  • Pokud je klíč tohoto kbelíku rovný tomu, co hledáte, hledání je dokončeno. Pokud tomu tak není, pokračujte dál.
  • Ve výsledném cyklu se z pNext převezme kbelík, pak se ujistěte, zda je klíč roven požadovanému.

Takové akce je třeba opakovat, dokud se lopaty úplně nedostanou z pNext, nebo dokud nenajdete zápas, o který máte zájem.

Stojí za zmínku, že multidimenzionální pole PHP je téměř kompletně postaveno na jediné struktuře HashTable, protože všechny proměnné, které jsou v určitém oboru, jsou ve skutečnosti v této struktuře dat, roztržené jako metody, pole a definice třídy. Navíc tato datová struktura umožňuje dosáhnout téměř stejné rychlosti všech operací a zároveň jim umožňuje mnohem jednodušší provedení.

Definice v poli

php odstranit pole

Pole je vytvořeno pomocí pole konstrukcí jazyka, které může mít jako parametry libovolný počet klíčových => hodnotových párů oddělených čárkami.

Klíčem v tomto případě může být řetězec nebo celé číslo. Pokud je klíč standardním číslem, bude v tomto případě interpretován, zatímco plovák bude oříznut do tohoto formátu. Je třeba poznamenat, že třídění pole v PHP neposkytuje žádný rozdíl mezi asociativními a indexovými poli, tj. Existuje pouze jeden typ úložiště, který obsahuje jak řetězec, tak číselné indexy.

Užitečné funkce

hodnota php v poli

Pro normální práci s polimi je dostatečně velký počet různých funkcí, ale ne všichni znají a jsou schopni je používat. Zejména je třeba věnovat zvláštní pozornost takové funkci, jako je unset, což umožňuje zcela odstranit klíče, které má prvek pole v PHP. Pokud chcete provést akci ve stylu "odebrat a přesunout", pak pole může být reindexed přes array_values.

Řídicí struktura foreach byla speciálně vytvořena pro práci s poli. Tato funkce slouží k snadnému zobrazení obsahu pole a interakci s daty.

Týmy

Při deklarování indexovaného pole PHP po nastavení názvu proměnné je také nastavena dvojice hranatých závorek, u kterých je přímo uvedena poloha daného pole. Existuje také několik základních příkazů, které musíte znát při vytváření tohoto pole:

  • Array. Tato funkce obdrží nulu nebo více prvků a poté zcela vrací pole, které je složeno z těchto prvků.
  • Seznam Tato konstrukce je poněkud podobná pole, ale jeho hlavním účelem je současně přiřadit různým hodnotám, která jsou extrahována z pole, současně několika proměnným.
  • Rozsah. Tento návrh poskytuje rychlé a snadné vytvoření pole celých čísel z intervalu, který je definován dolními a horními hranicemi. Tento příkaz plně vrací pole složené z celých čísel zadaného intervalu.
  • Array_chunk. Rozdělí pole do několika segmentů.

Jak můžete použít takové pole?

V každém případě musí být řetězec literál uzavřen v uvozovkách indexu asociativního pole. Poměrně často najdete syntaxi ve starých skriptech, ve kterých nejsou žádné uvozovky, a to může skutečně fungovat, i když je nesprávné. V tomto případě je důvod, že tento kód obsahuje neurčitou konstantu namísto řetězce, v důsledku čehož v PHP může být výstup pole takový, že "holý řádek" může být automaticky převeden na plný řetězec s odpovídající hodnotou. Jinými slovy, pokud nejprve nebylo možné určit nastavenou konstantu, pak PHP přidá vlastní citace a pak použije zadaný řetězec správně.

Je třeba poznamenat, že není vždy nutné ukládat klíče v uvozovkách. Například není třeba uvádět proměnné nebo konstanty v uvozovkách, protože v tomto případě může být výstup pole v PHP nesprávný a tyto příkazy budou nesprávně zpracovány.

Co to hrozí?

Pokud se vývojářský tým v budoucnu rozhodne přidat nějaké nové klíčové slovo nebo další konstantu, pak byste mohli mít problémy. Totéž platí pro situaci, pokud konstanta z jiného kódu zasahuje do vašeho pole. Například pravděpodobně nebudete moci používat slova jako výchozí a prázdná, protože jsou rezervované klíče.

Převést do pole

U některého z klíčových typů přeměna hodnoty na pole PHP, jejichž funkce si sám uživatel zvolí, nakonec poskytuje příležitost získat pole s jediným prvkem, který má skalární hodnotu.

Pokud se rozhodnete převést objekt do pole, pak se v tomto případě vlastnosti tohoto objektu použijí jako prvky tohoto pole. Jakmile se rozhodnete, jak vygenerovat pole v PHP, použijí se jako klíčy názvy vlastností objektu s určitými významnými výjimkami:

  • ztratíte přístup k celočíselným vlastnostem;
  • jméno bude přiděleno před každým uzavřeným polem třídy;
  • polí chráněných tříd v přední části mají přiřazený znak.

Všechny tyto přidané hodnoty mají na obou stranách nulové bajty, což často může vyvolat poněkud neočekávané chování pole pro jeho vlastníka.

Jak můžete vidět, použití takových polí je pro pokročilé uživatele mimořádně jednoduché a co je ještě důležitější, jsou pro jejich použití velmi výhodné. Žádný velký projekt nelze představit bez použití různých typů polí a současně jsme se pokoušeli zvážit pouze určitou část funkcí a dostupných funkcí takových systémů, aniž bychom se zmínili o tom, jak mohou být použity v různých situacích.