Programování je syntax a sémantika.První je určen pravidly jazyka, druhý - zkušeností vývojáře. S ohledem na pole může vývojář podrobit syntaxi sémantice. Ještě to není objekt, ale už to není pole v tradičním smyslu. PHP umožňuje vytvářet pole z proměnných různých typů, včetně sebe samých. Prvkem pole může být funkce, tj. Schopnost načíst pole se skutečným algoritmem, skutečným významem.
Syntaxe je stabilní, ale mění se z verze nanemusí být vždy kompatibilní s vyšší verzí. Přenositelnost programu je dobře zapomenutým úspěchem minulého století. Sémantika se vyvíjí a lze ji vždy použít nejen v jakékoli verzi jakéhokoli jazyka; stalo se tradicí používat syntaktické konstrukce k vyjádření toho, co nebylo stanoveno ani pravidly jazyka. Jako příklad lze použít pole, což lze nejjednodušší pochopit.
Konstruování polí
Pole PHP mají pohodlnou syntaxi a funkčnost. Tento datový typ lze popsat předem, ale je často vhodné vytvářet pole za běhu podle potřeby.
public $ aNone = array (); // pole je popsáno a neobsahuje nic
public $ aFact = array ("avokádo", "broskev", "třešeň"); // toto pole má tři prvky
Vytvoření pole v procesu kontroly některé podmínky:
$ cSrcLine = "analyzovaný datový řádek";
pro ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // něco vložte
if (checkFunc ($ cSrcLine, $ cUserLine) {
$ aResult [] = "Ano"; // přidat do PHP pole
} else {
$ aResult [] = "Ne";
}}
}}
V důsledku provedení tohoto příkladupole 13 prvků, jejichž hodnotami budou pouze řetězce „Ano“ nebo „Ne“. Elementy obdrží indexy od 0 do 12. Stejného efektu lze dosáhnout tak, že nejprve napíšete „budoucí“ pole PHP na řetězec:
$ cFutureArray = "";
pro ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // něco vložte
if ($ i> 0) {$ cFutureArray. = "|"; }
if (checkFunc ($ cSrcLine, $ cUserLine) {$ cFutureArray. = "Ano";
} else {$ cFutureArray. = "Ne"; }
}}
$ aResult = explodovat ("|", $ cFutureArray);
Vícedimenzionální pole
Mnoho systémů pro správu stránek (SMS)používat pole „ve velkém“. Na jedné straně je to dobrá praxe, na druhé straně je obtížné ji aplikovat. I když autor rozumí doktríně PHP-array-in-array, neměla by být zneužívána: na složitou notaci si bude muset zvyknout nejen vývojář. Často si tvůrce po nějaké době bude dlouho pamatovat to, co nejprve napsal:
návratové pole (
"view_manager" => array (41, "template_path_stack" => array (__DIR__. "/../view",),
"router" => pole ("trasy" => pole ("sayhello" => pole (
"type" => "ZendMvcRouterHttpLiteral",
"options" => array ("route" => "/ sayhello", "defaults" => pole (
"controller" => "HelloworldControllerIndex", "action" => "index",))))),
"controllers" => array ("invokables" => array (
"HelloworldControllerIndex" => "HelloworldControllerIndexController"))
);
Toto je PHP Array v Array Sample Practice od ZF2. Nejprve velmi inspirativní, ale funguje a pravděpodobně dělá tento rámec úspěšným (příklad z modulu ZendSkeletonApplication / module / Helloworld / config / module.config.php).
Pole je důležitý datový konstrukt běhemnávrh a vývoj. Jeho vícerozměrná verze byla kdysi populární, ale v průběhu času stále existuje potřeba polí maximálně dvou nebo tří rozměrů. To je jednodušší a jasnější, ale z profesionálního hlediska, když se něco začne množit, znamená to, že ve výpisu problému nebo v kódu něco není v pořádku.
Jednoduché, přístupné a srozumitelné
Vytvořením v php je nejlepší pole v poliomezena na dvě nebo tři úrovně. I přes stabilitu a spolehlivost dělá PHP při zpracování syntaxe chyby. Můžete to snášet, mít dobrý editor kódu, zvyklý na přesné počítání závorek a čárek. PHP však nekontroluje datové typy (to je karma moderního programování) a umožňuje vývojáři procvičovat sémantické chyby.
Pravidlo pro ovládání typů proměnných, nebovlastní myšlenky přeměny sémantiky na syntaxi jsou často nepřijatelným luxusem. Jedná se o ztrátu rychlosti skriptu, čitelnosti kódu, ... proto je vždy zásadní snadné kódování.
PHP má významnou nevýhodu:pokud existuje nejistota, skript prostě visí. Ne všichni debuggery řeší nepředvídané události a hodně záleží na zkušenostech a intuici vývojáře. Čím je algoritmus jednodušší, tím přístupnější jsou strukturované informace, tím větší je šance najít chybu nebo ji vůbec nepřipustit.
Je charakteristické, že když se objevila první pole,byly navrženy varianty dat ve formě struktur - neohrabaný pokus vytvořit něco z různých typů dat. První přežili a získali novou účinnou syntaxi, zatímco poslední jsou historií.
Jednoduchá a asociativní pole
Zápis dvourozměrného pole je další párzávorky „[“ a „]“, například: $ aSrcData [1] [2] znamená odkaz na prvek [2] pole [1] zahrnutý v poli $ aSrcData. V PHP není požadavek deklarovat data předem. Existenci jakékoli deklarované informace lze vždy zkontrolovat.
Je velmi efektivní vytvořit něco, pouze pokudje-li to potřeba, ve formě, v jaké to bylo požadováno, a zničit, když její potřeba zmizela. Použitím rozumných jmen jako klíčů (indexů) můžete získat čitelné konstrukce, které mají smysl v kontextu aktuálního místa v algoritmu:
$ aAnketa ["name"] = "Ivanov";
$ aAnketa ["age"] = 42;
$ aAnketa ["work"] = "ředitel";
$ aAnketa ["active"] = true;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Petrov";
$ aAnketa ["věk"] = 34;
$ aAnketa ["work"] = "Správce";
$ aAnketa ["active"] = true;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Afanasiev";
$ aAnketa ["age"] = 28;
$ aAnketa ["work"] = "Pracovník";
$ aAnketa ["active"] = false;
$ aTable [] = $ aAnketa;
$ sOne. = implode (";", $ aTable [1]). „<br/>“; // druhé pole PHP na řetězec
$ sOne. = $ aTable [1] ["práce"]; // přístup k jednomu prvku druhého pole
Výsledek tohoto příkladu (první pole je normální, klíče v něm začínají od 0, druhé pole je asociativní, má čtyři klíče: „name“, „age“, „work“, „active“):
$ sOne = "Petrov; 34; manažer; 1 <br/> manažer";
V tomto jednoduchém příkladu vidíte, jak na tovytvořený profil lze použít na všechny zaměstnance. Můžete vytvořit řadu zaměstnanců s indexy podle personálních čísel a pokud potřebujete konkrétního zaměstnance, vyberte jej podle osobního čísla.
Pokud má organizace oddělení nebo existujísezónní pracovníci nebo potřebujete oddělit pracující důchodce ... pole PHP v konstrukci pole je velmi užitečné, ale nikdy byste se neměli nechat unést dimenzionálností. Limitem pro efektivní řešení jsou dva nebo tři rozměry.
Klávesy pro práci s poli
Pokud předtím záleželo na tom, jak všechno funguje, pakV posledních letech byly zcela zapomenuty tradice binární éry, kdy programátor chtěl přesně vědět, jak byly prvky pole uloženy, a chtěl k nim mít přímý přístup. Existuje mnoho kódování znaků, které v paměti zabírají více než jeden bajt. Slovo „bit“ lze nyní najít pouze v bitových vyhledávacích operacích, ale hledání v poli PHP je samostatným tématem. Přístup k prvku může být jednoduchý a asociativní. V prvním případě jsou prvky pole (které mají některý z typů dostupných v PHP) očíslovány 0, 1, 2, ... V druhém případě programátor specifikuje svůj vlastní index, který se často nazývá „klíč“ k přístup k požadované hodnotě.
$ aLine ["fruit"] = "oranžová"; // zde klíč PHP pole = "ovoce"
nebo (aby bylo vše v pořádku, sledujte kódování stránky a kódu):
$ aLine [ikonav ("utf-8", "CP1251", "ovoce")] = ikonav ("utf-8", "CP1251", "oranžová");
Při přidávání nové hodnoty do pole $ aLine:
$ aLine [] = iconv ("utf-8", "CP1251", "broskev");
$ aLine [ikonav ("utf-8", "CP1251", "zelenina")] = ikonav ("utf-8", "CP1251", "okurka");
$ aLine [] = iconv ("utf-8", "CP1251", "lilek");
v důsledku provedení smyčky:
foreach ($ aLine jako $ ck => $ cv) {
$ cOne. = $ ck. „=“. $ cv. „<br/>“;
}}
obdrží:
ovoce = pomeranč
0 = broskev
zelenina = okurka
1 = lilek
Při přidávání prvků „broskev“ a „lilek“ se klíč PHP pole vytvoří postupně od 0 a při zadání jeho hodnoty se bude rovnat této hodnotě.
Odebrání prvků z pole
Nejjednodušší způsob, jak odstranit prvek pole PHP, jezpracovává to. V tomto případě se například v důsledku provedení smyčky naskenuje původní pole a vytvoří se nové pole, do kterého se nepíše zbytečné prvky.
Můžete to udělat jednodušší. Použijeme-li poslední příklad:
unset ($ aLine [0]); // odebrání prvku z pole PHP
výsledkem bude:
ovoce = pomeranč
zelenina = okurka
1 = lilek
Možnosti manipulace s prvky polemnoho jich může být postaveno. Například pomocí funkcí: implode () a explode () můžete napsat řetězec PHP na řetězec s jedním oddělovačem a pomocí jiného oddělovače jej analyzovat zpět do jiného pole.
Chcete-li jednoduše smazat celé pole v PHP, stačí napsat: unset ($ aLine);
Je to dost.
Hledejte v poli
PHP obsahuje speciální vyhledávací funkcearray_keys (), array_values (), array_key_exists () a in_array (), ale předtím, než se rozhodnete je použít, měli byste zvážit, abyste si sami prohledali pole PHP.
Každý projekt má specifickou oblast,konstruovaná pole, zvláště když byla část sémantiky přenesena do syntaxe a představována sadou velmi konkrétních smysluplných klíčů. To vám umožní provádět vlastní vyhledávací funkce, které lze také smysluplně označit.
V PHP můžete volat funkce, jejichž názvy jsou určeny během provádění programu. Velmi praktický příklad z knihovny PHPWord, který vám umožňuje číst a vytvářet dokumenty MS Word:
$ elements = array ("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Table", "Image", "Object", "Footnote",
„Endnote“, „CheckBox“, „TextBox“, „Field“, „Line“);
$ functions = array ();
for ($ i = 0; $ i <count ($ elements); $ i ++) {
$ functions [$ i] = "přidat". $ elements [$ i];
}}
Výsledkem je, že pole $ functions přijme hodnoty pole $ elements, tj. Názvy skutečných funkcí, které provádějí práci se skutečnými prvky dokumentu.
Voláním $ functions [4] pro $ elements [4] získáte dokonalé vyhledávání a rychlé výsledky.
Třídění položek
Úkol třídění dat je zásadní, aPHP k tomu nabízí několik funkcí: sort (), rsort (), asort (), ksort (), ... Vzestupné a sestupné prvky, druhé dvě funkce zachovávají vztah mezi klíči a hodnotami. Někdy má smysl náhodně zamíchat hodnoty pole - shuffle ().
Pokud k třídění používáte funkce PHP, nedělejte tozapomenout, že prvky mohou mít nejen různé typy, ale také ne zcela přirozený obsah. Nejprve musíte být velmi opatrní při řazení řetězců obsahujících ruská písmena, řazení dat a čísel, která jsou napsána v různých formátech.
Nejlepší způsob, jak sami napsat dokonalé řešení, alespoň během testovací fáze skriptu, je ruční třídění. Pomůže předvídat nepředvídané situace.
Inline pole
Díky funkcím implode () a explodovat () polelze snadno transformovat na řetězec a přijmout zpět. To vám umožní ukládat data v kompaktní formě a podle potřeby je rozšířit do vhodného stavu.
Pole změněné na řetězec otevírá nové možnosti. Například úkol najít klíčová slova v textu vyžaduje, aby nalezené nebyly znovu přidány.
$ cSrcLine = "Textový text ListItemRun TextBox ListItem TextBox Zaškrtávací políčko CheckBox TextBox Poznámka pod čarou";
$ aSrc = explodovat ("", $ cSrcLine);
$ cDstLine = "";
for ($ i = 0; $ i <count ($ aSrc); $ i ++) {
$ cFind = "[". $ aSrc [$ i]. "]";
if (! is_integer (strpos ($ cDstLine, $ cFind))) {
$ cDstLine. = $ cFind;
}}
}}
$ aDst = explodovat ("] [", $ cDstLine);
$ cOne = implode (";", $ aDst);
Výsledkem je, že proměnná $ cOne obdrží pouze ty hodnoty z původního řetězce, které se tam vyskytnou jednou: "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Footnote".
Ruský jazyk v klíčích a hodnotách
Nedoporučuje se používat nic souvisejícíhos národním kódováním, ve syntaktických konstrukcích. Ruský jazyk, stejně jako všechny ostatní jazyky, jejichž znaky jdou nad rámec a-z, nezpůsobí problémy v datové oblasti, ale nikoli v syntaxi kódu. Někdy i jednoduchá úloha PHP „vytisknout pole na tiskárnu nebo na obrazovku“ povede k „krakozyabra“ a častěji zastaví skript.
PHP je loajální jazyk a je tolerantnínárodní kódování, ale existuje mnoho situací, kdy je nutné dokončit práci opakovaně jen proto, že na správném místě a ve správný čas se objeví klíčová hodnota, kterou nebude možné rozpoznat.
Syntaxe a jazykové prostředí PHP
Mějte na paměti, že syntaxe PHP je jedna věc, alekonstrukty této syntaxe se „zabývají“ jinými aplikacemi, operačním systémem a hardwarovými možnostmi. Existuje mnoho možností, nikdy není možné předvídat všechno.
Pravidlo je „v kódu je pouze kód, ale na vstupu,uvnitř a na východu jsou všechny informace “pomůže vyhnout se neočekávaným překvapením. Hodnota PHP v poli může být „ruská“, ale klíč k ní musí být syntakticky správný nejen z hlediska daného jazyka, ale také z hlediska jeho prostředí.