/ /PHP: pole v poli. PHP Array Search

PHP: pole v poli. Vyhľadávanie poľa PHP

Programovanie je o syntaxi a sémantike.Prvý je určený pravidlami jazyka, druhý skúsenosťami vývojára. Pokiaľ ide o polia, vývojár môže špecificky načítať syntax so sémantikou. Toto ešte nie je objekt, ale už to nie je pole v tradičnom zmysle. PHP vám dáva možnosť vytvárať polia premenných rôznych typov, vrátane nich samotných. Prvok poľa môže byť funkcia, to znamená schopnosť načítať pole skutočným algoritmom, skutočný význam.

Syntax je stabilná, ale mení sa od verzie k verziiverzie a nemusia byť vždy kompatibilné ani zdola nahor. Prenosnosť programu je dobre zabudnutým výdobytkom minulého storočia. Sémantika sa vyvíja a vždy sa dá aplikovať nielen v akejkoľvek verzii akéhokoľvek jazyka; Stalo sa tradíciou používať syntaktické konštrukcie na vyjadrenie toho, čo ani pravidlá jazyka neumožňovali. To možno najjednoduchšie pochopiť na príklade polí.

Konštrukcia polí

Pole v PHP má pohodlnú syntax a funkčnosť. Tento typ údajov je možné opísať vopred, ale často je vhodné vytvárať polia za chodu podľa potreby.

public $aNone = pole(); // pole je popísané a neobsahuje nič

public $aFact = array("avokádo", "broskyňa", "čerešňa"); // toto pole má tri prvky

Vytvorenie poľa pri kontrole podmienky:

$cSrcLine = "analyzovaný dátový riadok";

for ($i=0; $i<13; $i++) {

$cUserLine = inputUserLine(); // zadajte niečo

if (checkFunc($cSrcLine, $cUserLine) {

$aResult[] = "Áno"; // pridať do poľa PHP

} inak {

$aResult[] = "Nie";

}

}

V dôsledku vykonania tohto príkladu sa vytvorípole 13 prvkov, ktorých hodnoty budú iba reťazce „Áno“ alebo „Nie“. Prvky získajú indexy od 0 do 12. Rovnaký efekt možno dosiahnuť, ak najskôr zapíšete „budúce“ pole PHP do reťazca:

$cFutureArray = "";

for ($i=0; $i<13; $i++) {

$cUserLine = inputUserLine(); // zadajte niečo

if ($i > 0) { $cFutureArray .= "|"; }

if (checkFunc($cSrcLine, $cUserLine) { $cFutureArray .= "Áno";

} else { $cFutureArray .= "Nie"; }

}

$aResult = explode("|", $cFutureArray);

php pole na reťazec

Viacrozmerné polia

Mnoho systémov na správu obsahu (CMS)používať polia vo veľkom. Na jednej strane je to dobrá prax, na druhej strane to sťažuje používanie. Aj keď autor rozumie doktríne „PHP pole v poli“, nemal by ju zneužívať: na zložitý zápis si bude musieť zvyknúť nielen vývojár. Samotný tvorca si často po chvíli bude dlho pamätať, čo napísal:

návratové pole(

"view_manager" => array(41, "template_path_stack" => array( __DIR__ . "/../view", ),

"router" => array("routes" => array("sayhello" => array(

"type" => "ZendMvcRouterHttpLiteral",

"options" => array("route" => "/sayhello", "defaults" => array(

"controller" => "HelloworldControllerIndex", "action" => "index",))))),

"controllers" => array("invokables" => array(

"HelloworldControllerIndex" => "HelloworldControllerIndexController"))

);

Toto je vzorová prax "PHP Array in an Array" od ZF2. Spočiatku to nie je príliš inšpirujúce, ale funguje to a možno robí tento framework úspešným (príklad zo ZendSkeletonApplication/module/Helloworld/config/module.config.php).

odstrániť prvok poľa php

Pole je dôležitým dátovým konštruktom počasdizajn a vývoj. Jeho viacrozmerná verzia bola kedysi populárna, ale postupom času zostala potreba polí maximálne dvoch alebo troch rozmerov. Takto je to jednoduchšie a prehľadnejšie a z profesionálneho hľadiska, keď sa niečo začne množiť, znamená to, že niečo nie je v poriadku v probléme alebo v kóde.

Jednoduché, prístupné a zrozumiteľné

Najlepšie je vytvoriť pole v poli v PHPobmedziť na dve alebo tri úrovne. Napriek stabilite a spoľahlivosti PHP robí chyby pri spracovaní syntaktických štruktúr. Môžete sa s tým zmieriť, ak máte dobrý editor kódu a zvyknete si presne počítať zátvorky a čiarky. PHP však neovláda dátové typy (to je karma moderného programovania) a umožňuje vývojárovi precvičiť si sémantické chyby.

Pravidlo na ovládanie typov premenných respvlastné nápady na transformáciu sémantiky do syntaxe sú často nedostupným luxusom. Ide o stratu rýchlosti skriptu, čitateľnosti kódu, ... pretože jednoduchosť v kódovaní je vždy podstatná.

PHP má významnú negatívnu vlastnosť:keď príde neistota, scenár jednoducho zamrzne. Nie každý debugger si dokáže poradiť s nepredvídanými okolnosťami a veľa závisí od skúseností a intuície vývojára. Čím jednoduchší je algoritmus, čím sú informácie prístupnejšie, tým je väčšia šanca nájsť chybu alebo jej úplne zabrániť.

Je charakteristické, že keď sa objavili prvé polia,boli navrhnuté varianty údajov vo forme štruktúr - nemotorný pokus vytvoriť niečo z rôznych typov údajov. Prvý prežil a získal novú efektívnu syntax, zatiaľ čo druhý sa stal históriou.

Jednoduché a asociatívne polia

Zápis dvojrozmerného poľa je ďalší párzátvorky "[" a "]", napríklad: $aSrcData[1][2] znamená prístup k prvku [2] poľa [1], zahrnutého v poli $aSrcData. V PHP nie je potrebné vopred deklarovať údaje. Existencia akejkoľvek uvedenej informácie môže byť vždy overená.

Je veľmi efektívne vytvárať niečo len vtedykeď je to potrebné, v takej forme, v akej sa to vyžadovalo, a zničené, keď potreba pominula. Použitím zmysluplných názvov ako kľúčov (indexov) môžete získať čitateľné konštrukcie, ktoré sú zmysluplné v kontexte aktuálneho miesta v algoritme:

$aAnketa["name"] = "Ivanov";
$aAnketa["vek"] = 42;
$aAnketa["work"] = "Riaditeľ";
$aAnketa["active"] = true;
$aTable[] = $aAnketa;

$aAnketa["name"] = "Petrov";
$aAnketa["vek"] = 34;
$aAnketa["work"] = "Manažér";
$aAnketa["active"] = true;
$aTable[] = $aAnketa;

$aAnketa["name"] = "Afanasyev";
$aAnketa["vek"] = 28;
$aAnketa["work"] = "Pracovník";
$aAnketa["aktívny"] = nepravda;
$aTable[] = $aAnketa;

$sOne .= implode ("; ", $aTable[1]) . "<br/>"; // druhé pole PHP na reťazec
$sOne .= $aTable[1]["práca"]; // prístup k jednému prvku druhého poľa

Výsledok tohto príkladu (prvé pole je normálne, kľúče v ňom začínajú od 0, druhé pole je asociatívne, má štyri kľúče: „meno“, „vek“, „práca“, „aktívny“):

$sOne = "Petrov; 34; Manažér; 1<br/>Manažér";

Na tomto jednoduchom príklade môžete vidieť, ako na tovytvorený dotazník je možné aplikovať na všetkých zamestnancov. Môžete si vytvoriť pole zamestnancov s indexmi podľa osobných čísel a ak potrebujete konkrétneho zamestnanca, vybrať ho podľa osobného čísla.

Ak má organizácia divízie, alebo existujúsezónnych pracovníkov, alebo potrebujete samostatne identifikovať pracujúcich dôchodcov, ... dizajn „PHP pole v poli“ je veľmi pohodlný, ale nikdy by ste sa nemali nechať uniesť rozmermi. Dva alebo tri rozmery sú limitom pre efektívne riešenie.

hľadať v poli php

Klávesy pre prácu s poliami

Ak predtým záležalo na tom, ako všetko fungovalo, potomV posledných rokoch sa úplne zabudlo na tradície binárnej éry, keď chcel programátor presne vedieť, ako sú prvky poľa uložené a chcel k nim mať priamy prístup. Objavilo sa mnoho kódovaní znakov, ktoré zaberajú viac ako jeden bajt v pamäti. Slovo „bit“ možno teraz nájsť iba v operáciách vyhľadávania bitov, ale vyhľadávanie poľa PHP je samostatná téma. Prístup k prvkom môže byť jednoduchý a asociatívny. V prvom prípade sú prvky poľa (ktoré majú niektorý z typov dostupných v PHP) očíslované 0, 1, 2, ... V druhom prípade programátor špecifikuje svoj vlastný index, často nazývaný „kľúč“, na prístup požadovanú hodnotu.

$aLine["ovocie"] = "pomaranč"; // tu kľúč poľa PHP = "ovocie"

alebo (aby bolo všetko správne, rešpektujúc kódovanie stránky a kód):

$aLine[iconv("utf-8", "CP1251", "ovocie")] = iconv("utf-8", "CP1251", "oranžová");

Pri pridávaní novej hodnoty do poľa $aLine:

$aLine[] = iconv("utf-8", "CP1251", "broskyňa");
$aLine[iconv("utf-8", "CP1251", "zelenina")] = iconv("utf-8", "CP1251", "uhorka");
$aLine[] = iconv("utf-8", "CP1251", "baklažán");

ako výsledok vykonania cyklu:

foreach ($aLine ako $ck => $cv) {
$cOne .= $ck . "=" . $ cv . "<br/>";
}

dostane:

ovocie=pomaranč
0 = broskyňa
zelenina=uhorka
1 = baklažán

Kľúč poľa PHP pri pridávaní prvkov „broskyňa“ a „baklažán“ sa vytvára postupne od 0 a pri zadávaní jeho hodnoty sa bude rovnať tejto hodnote.

Odstránenie prvkov z poľa

php odstrániť pole

Najjednoduchší spôsob, ako odstrániť prvok poľa PHP, jejeho spracovanie. V tomto prípade sa napríklad v dôsledku vykonania slučky naskenuje pôvodné pole a vytvorí sa nové, do ktorého sa nepotrebné prvky jednoducho nezapíšu.

Mohlo by to byť jednoduchšie. Ak použijeme posledný príklad:

unset($aLine[0]); // odstránenie prvku poľa PHP

potom výsledok bude:

ovocie=pomaranč
zelenina=uhorka
1 = baklažán

Možnosti manipulácie s prvkami poľamnohé sa dajú postaviť. Napríklad pomocou funkcií: implode() a explode() môžete zapísať pole PHP do reťazca s jedným oddeľovačom a analyzovať ho späť do iného poľa pomocou iného oddeľovača.

Ak chcete jednoducho odstrániť celé pole v PHP, stačí napísať: unset($aLine);

Je to dosť.

Vyhľadajte v poli

PHP obsahuje špeciálne funkcie vyhľadávaniaarray_keys(), array_values(), array_key_exists() a in_array(), ale skôr ako sa ich rozhodnete použiť, mali by ste zvážiť, či si sami nevyhľadáte pole PHP.

kľúč poľa php

Každý projekt má špecifickú oblasť,konštruované polia, najmä ak je časť sémantiky prenesená do syntaxe a je reprezentovaná množinou veľmi špecifických zmysluplných kľúčov. To vám umožňuje vykonávať vlastné funkcie vyhľadávania, ktoré môžu byť tiež zmysluplne označené.

V PHP môžete volať funkcie, ktorých názov je určený počas vykonávania programu. Veľmi praktický príklad z knižnice PHPWord, ktorá umožňuje čítať a vytvárať dokumenty MS Word:

$elements = array("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Tabuľka", "Obrázok", "Objekt", "Poznámka pod čiarou",
"Koncová poznámka", "Začiarkavacie políčko", "Textové pole", "Pole", "Riadka");

$funkcie = pole();

for ($i = 0; $i < count($elements); $i++) {
$functions[$i] = "pridať" . $elements[$i];
}

Výsledkom je, že pole $functions dostane hodnoty poľa $elements, teda názvy skutočných funkcií, ktoré pracujú so skutočnými prvkami dokumentu.

Volaním $functions[4] na $elements[4] môžete získať perfektné vyhľadávanie a rýchle výsledky.

Triedenie položiek

Úloha triedenia údajov je dôležitá aPHP na to ponúka niekoľko funkcií: sort(), rsort(), asort(), ksort(), ... Vzostupné a zostupné prvky, druhé dve funkcie ukladajú vzťahy medzi kľúčmi a hodnotami. Niekedy má zmysel náhodne premiešať hodnoty poľa - shuffle().

php hodnotu v poli

Pri použití funkcií PHP na triedenie by ste nemalizabudnite, že prvky môžu mať nielen rôzne druhy, ale aj nie celkom prirodzený obsah. Po prvé, musíte byť veľmi opatrní pri triedení reťazcov obsahujúcich ruské písmená, triedenie dátumov, ako aj čísel, ktoré sú napísané v rôznych formátoch.

php pole v poli

Najlepší spôsob, ako si sami napísať ideálne riešenie, aspoň vo fáze testovania skriptu, je manuálne triedenie. Pomôže to predvídať nepredvídané situácie.

String Arrays

Vďaka funkciám implode() a explode() polemožno ľahko premeniť na reťazec a vrátiť späť. To vám umožňuje ukladať dáta v kompaktnej reprezentácii a podľa potreby ich rozširovať do vhodného stavu.

Pole prevedené na reťazec otvára nové možnosti. Napríklad úloha vyhľadávania kľúčových slov v texte vyžaduje, aby sa nájdené znova nepridávalo.

$cSrcLine = "Text Text ListItemSpustiť TextBox ListItem TextBox Zaškrtávacie políčko CheckBox TextBox poznámka pod čiarou";

$aSrc = explode(" ", $cSrcLine);
$cDstLine = "";

for ($i=0; $i < count($aSrc); $i++) {
$cFind = "[" . $aSrc[$i] . "]";
if ( ! is_integer(strpos($cDstLine, $cFind))) {
$cDstLine .= $cFind;
}
}
$aDst = explode("][", $cDstLine);

$cOne = implode("; ", $aDst);

Výsledkom je, že premenná $cOne dostane iba tie hodnoty zo zdrojového reťazca, ktoré sa tam objavia raz: „Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Poznámka pod čiarou“.

Ruský jazyk v kľúčoch a významoch

Neodporúča sa používať nič súvisiaces národnými kódovaniami, v syntaktických štruktúrach. Ruština, rovnako ako všetky ostatné jazyky, ktorých znaky presahujú a-z, nespôsobí problémy, pretože sa nachádza v oblasti údajov, ale nie v syntaxi kódu. Niekedy aj jednoduchá úloha v PHP „vytlačiť pole do tlačiarne alebo na obrazovku“ povedie k „bláznivým chybám“ a častejšie sa skript jednoducho zastaví.

PHP je priateľský jazyk a tolerujenárodných kódovaní, ale existuje veľa situácií, keď sa dokončené množstvo práce musí vykonať znova len preto, že sa na správnom mieste a v správnom čase objaví kľúčová hodnota, ktorú nie je možné rozpoznať.

Syntax PHP a jazykové prostredie

Jedna vec, ktorú si treba zapamätať, je, že syntax PHP je jedna vec, alekonštrukcie tejto syntaxe sa „zaoberajú“ inými aplikáciami, operačným systémom a hardvérovými možnosťami. Možností je veľa, nikdy nie je možné zabezpečiť všetko.

Pravidlo „v kóde je len kód, ale na vstupe,vnútri sú najrôznejšie informácie a výstup pomôže vyhnúť sa nepredvídaným prekvapeniam. Hodnota PHP v poli môže byť „ruská“, ale kľúč k nej musí byť syntakticky správny nielen z hľadiska daného jazyka, ale aj z hľadiska jeho operačného prostredia.