Kontakty

Ako skontrolovať prítomnosť hodnoty v poli PHP. PHP: Array_Search - Rýchle vyhľadávanie podľa PHP Array Hľadať pole podľa hodnoty

Hľadanie hodnôt v poli sa vyžaduje v takmer každej aplikácii PHP, skript pre údaje pracujúce s údajmi, pre ktoré existuje mnoho spôsobov a špeciálnych funkcií. V závislosti od úlohy a typu vyhľadávania by ste mali používať určité nástroje, vzhľadom na ich vlastnosti, rýchlosť vykonania a pohodlie používania. Ďalej sa oboznámiť s PHP funkciami hľadania prvkov v oblasti, možné návrhy a metódy, ako aj zistiť, akú metódu je najrýchlejšia.

Funkcie pre vyhľadávanie v poli:
array_search. - Používa sa na vyhľadávanie hodnôt v poli. Ak je to dobré, vráti kľúč požadovanej hodnoty, ak sa nenájde nič - vráti false. Pred verziou PHP 4.2.0, Array_search (), s poruchou, NULL sa vrátila, nie FALSE.

ZMESENÁ ARRAY_SEARCH REZERVÁCIA Syntax (zmiešaná ihla, Array Haystack [, Bool Strict]).

foreach (array_expression ako hodnota $)
Vyhlásenie
Foreach (array_expression ako $ kľúč \u003d\u003e $
Vyhlásenie

Príklad použitia funkcie FEAAAACH na vyhľadávanie prvku poľa, vráti TRUE, keď je úspešná

Stavebná syntax
Zatiaľ čo (expr)
Vyhlásenie

Vráti prípad prvku poľa, keď je úspešný

Z vyššie uvedenej tabuľky meraní je možné vidieť, že funkcia array_search., ukazuje najlepší výsledok ako pri hľadaní malých a veľkých polí. Zároveň sa výrazne zvyšuje čas vyhľadávania pre súbor cyklov výrazne v závislosti od veľkosti poľa.

(PHP 4\u003e \u003d 4.0,5, PHP 5)

array_Search - vyhľadáva túto hodnotu v poli a vráti príslušné tlačidlo, ak sú šťastie

Popis

zmiešané. array_search. (Zmiešaná ihla, pole Haystack [, bool prísny])

Hľadáte v seno Hodnota ihly a vráti kľúč, ak je prítomný v poli Falošný inak.

Komentár: Ak je ihla reťazec, je vykonané porovnanie závislé od registra.

Komentár: Na php 4.2.0, array_search () Ak je to možné, vráti sa NULOVÝ namiesto toho Falošný .

Ak prejdete hodnotu Pravda. ako voliteľný tretí prísny parameter, funkcia array_search () Skontrolujte aj ihlu typu v poli Haystack.

Ak je ihla prítomná v seno -stacku viac ako raz, zistené prvé tlačidlo sa vráti. Ak chcete vrátiť klávesy pre všetky nájdené hodnoty, použite funkciu array_Keys () S voliteľným parametrom Search_Value.


Príklad 1. Príklad použitia array_search ()

$ Array \u003d Array (0 \u003d\u003e "Blue", 1 \u003d\u003e "Red", 2 \u003d\u003e 0x000000A, 3 \u003d\u003e "Green", 4 \u003d\u003e "Red"); $ Key \u003d Array_Search ( "Red", $ array ); // $ kľúč \u003d 1;
$ KEY \u003d ARRAY_SEARCH ("Zelený", $ Array); // $ kľúč \u003d 2; (0x000000 \u003d\u003d 0 \u003d\u003d "zelená")
$ Key \u003d Array_Search ( "Green", $ Array, True); // $ kľúč \u003d 3;
?>
Pozornosť

Táto funkcia sa môže vrátiť ako logickú hodnotu. Falošný a netýka sa hodnoty logického typu, ktorá je daná Falošný , Napríklad 0 alebo "". Ďalšie informácie nájdete v časti typu Boulev. Použite príkaz \u003d\u003d\u003d na kontrolu hodnoty vrátenej touto funkciou.

Jedna z hlavných operácií pri práci s poliami je vyhľadávanie špecifickej hodnoty. Na tento účel funkcia PHP Array_search (). Je schopný spracovať jednorozmerné aj asociatívne zbierky, vrátenie kľúča požadovanej hodnoty, ak sa nachádza v poli.

Syntax

Formalizovaný popis funkcie Array_Search () v PHP je nasledovné:

Zmiešaný array_search (zmiešaná hodnota, Array $ Collection [, bool prísny])

Vstupné parametre:

  • $ Collection - pole, v ktorom sa bude vyhľadať;
  • hodnota je požadovaná hodnota akéhokoľvek typu;
  • prísne je voliteľná logická vlajka, ktorá zavádza prísny porovnávací mechanizmus založený na typoch.

Pracovný mechanizmus

Funkcia PHP Array_search () striedavo porovnáva hodnotu so všetkými hodnotami v oblasti zberu. V predvolenom nastavení je porovnanie sa vykonáva bez zohľadnenia typy operandov. Toto nastavenie je možné zmeniť nastavením hodnoty TRUE pre vlajku. Porovnanie reťazcov sa vykonáva s ohľadom na register.

Keď je detekovaná zhoda, je vrátená tlačidlo zodpovedajúce nájdené prvku, a prevádzku funkcie sa zastaví. Preto je nemožné detekovať viac vstupov požadované hodnoty do poľa.

Ak nie je nájdený žiadny zápas, funkcia vráti Booleovu hodnotu FALSE.

Skontrolujte, či sa vrátený výsledok by mal používať prísny operátor rovnosti (\u003d\u003d\u003d). To je dôležité, pretože funkcia môže vrátiť hodnotu, ktorá je podávaná false, napríklad 0 alebo prázdny reťazec.

Príklady použitia

Príklad 1. Pri prenose multidimenzionálneho poľa na funkciu PHP Array_search () je výsledkom práce kľúčom požadovaného prvku.

"ZIMA", "Season2" \u003d\u003e "Spring", "Season3" \u003d\u003e "Leto", "sezóna4" \u003d\u003e "jeseň"); $ výsledok1 \u003d array_search ("zimné", $ pole); $ Výsledok2 \u003d array_search ("leto", $ pole); $ výsledok3 \u003d array_search ("apríl", $ pole); ?\u003e.

V tomto príklade bude premenná $ fask1 premenná "sezóna1", $ výsledok 2 bude "sezóna3", a $ výsledok3 bude pridelená booleanová hodnota false, pretože "apríl" reťazec sa nevyskytuje v zdrojovom poli.

Príklad 2. Funkcia PHP Array_Search () môže tiež spracovať jednorozmerné pole, počítanie tlačidiel v poradí podľa numerických indexov.

Variabilná prevodovka $ bude priradená 1, podľa indexu lovecového prvku v poli $ Array.

Príklad 3. Možná chyba pri analýze výsledku.

"Washington", 1 \u003d\u003e "ADAMS", 2 \u003d\u003e "Jefferson", 3 \u003d\u003e "Madison", 4 \u003d\u003e "Monroe"); $ výsledok \u003d array_search ("washington", $ prezidenti); Ak (! $ Výsledok) (ECHO "G. Washington nebol prvým prezidentom USA";)

Takže, bez kontroly výsledného výsledku s prísnou rovnosťou, môžete získať neočakávané posolstvo, že George Washington nebol prvým prezidentom Spojených štátov.

Príklad 4. Vráti sa iba kľúč prvej zistenej zhody.

Napriek tomu, že požadovaná hodnota sa nachádza v poli trojnásobok, funkcia vráti iba prvý výsledok - 0. Ak chcete vyhľadať viacero zápasov, odporúča sa používať funkciu PHP Array_KEYS ().

Programovanie je syntax a sémantika. Prvý je určený pravidlami jazyka, druhý - skúsenosti developer. Pokiaľ ide o polia, vývojár môže namietať proti syntaxe sémantiky. Toto nie je objekt, ale už nie je pole v tradičnom porozumení. PHP umožňuje vytvoriť polia z variabilných rôznych typov, vrátane seba. Prvok poľa môže byť funkciou, to znamená, že schopnosť vložiť pole s skutočným algoritmom, skutočným významom.

Syntax je stabilná, ale zmeny z verzie k verzii a nemôže byť vždy kompatibilná aj od zdola nahor. Prenosnosť programov je dobre zabudnutý dosiahnutím minulého storočia. Sémantika sa vyvíja a môže byť vždy aplikovaný nielen v akejkoľvek verzii akéhokoľvek jazyka; Bola to tradícia použiť syntaxové štruktúry, aby vyjadrili, že pravidlá jazyka neboli ani poskytnuté. V príklade polí je možné ľahko pochopiť.

Výstavba zbraní

Array v PHP má pohodlnú syntaxáciu a funkčnosť. Toto môže byť opísané vopred, ale často je vhodné vytvoriť polia na lietať podľa potreby.

verejné $ Anne \u003d Array (); // pole je opísané a nič neobsahuje

verejné $ AFATH \u003d pole ("avokádo", "broskyň", "cherry"); // v tomto poli tri prvky

Vytvorenie poľa v procese kontroly akéhokoľvek stavu:

$ csrclin \u003d "riadok analyzovaných údajov";

pre ($ i \u003d 0, $ i<13; $i++) {

ak (CheckFunc ($ csrclin, $ cuserline) (

$ Aresult \u003d "áno"; // Pridať do PHP Array

$ Aresult \u003d "nie";

V dôsledku realizácie tohto príkladu sa vytvorí pole 13 prvkov, ktorých hodnoty budú len "áno" alebo "žiadne" reťazce. Prvky budú prijímať indexy od 0 do 12. Rovnaký účinok možno získať po písaní "budúcnosti" PHP-pole v reťazci:

$ cfuturearray \u003d "";

pre ($ i \u003d 0, $ i<13; $i++) {

$ cuserline \u003d Inputuserline (); // niečo dať

ak ($ i\u003e 0) ($ cfuturearray. \u003d "|";)

ak (checkfunc ($ csrclin, $ cuserline) ($ cfuturearray. \u003d "Áno";

) Inak ($ \u200b\u200bcfuturearray. \u003d "Nie";)

$ Aresult \u003d explodovať ("|", $ cfuturearray);

Multidimenzionálne polia

Mnoho lokalít riadenia systémov (SMS) používajú polia "s rozsahom". Na jednej strane je to dobrá prax, na druhej strane, to sťažuje použitie. Aj keď je autor vyprší, že doktrína "PHP-pole v poli", potom by to nemalo byť zneužité: nielen vývojár bude musieť zvyknúť na komplexné notácie. Často po čase si tvorca sám o sebe bude pamätať na dlhú dobu, že napísal najprv:

"View_Manager" \u003d\u003e Array (41, "Template_path_stack" \u003d\u003e Array (__ DIR__. "/..../view",),

"ROUTER" \u003d\u003e ARRAY ("ROUTY" \u003d\u003e ARRAY ("SAYHELLO" \u003d\u003e ARRAY (

"Typ" \u003d\u003e "Zend MVC router http \\ t

"Možnosti" \u003d\u003e Array ("Route" \u003d\u003e "/ Sayhello", "Predvolené nastavenia" \u003d\u003e Array (

"Controller" \u003d\u003e "HelloWorkld regulátor index", "akcia" \u003d\u003e "index",)))))))

"Controllers" \u003d\u003e Array ("Invokables" \u003d\u003e Array (

"HelloWorld regulátor index" \u003d\u003e "HelloWorld Controller indexcontroller"))

Toto je vzorka praxe PHP-Array Prax v poli "od ZF 2. Nie príliš inšpiruje najprv, ale to funguje a možno robí tento rámec úspešný (príklad z ZendseletonApplication / Module / Hellogorld / Config / Module.config .php modul).

Array je dôležitým dizajnom dát počas dizajnu a vývoja. Jeho multidimenzionálna možnosť bola kedysi populárne, ale časom zostala potreba polí maximálne dvoch alebo troch dimenzií. Je to jednoduchšie a jasnejšie a z hľadiska profesionality, keď niečo začína znásobiť, znamená to, že niečo vo formulácii úlohy alebo v kóde nie je pravda.

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

Vytvorenie poľa v poli PHP, je najlepšie obmedziť dve tri úrovne. Napriek stabilite a spoľahlivosti PHP, robí chyby pri spracovaní syntaktických štruktúr. Môžete sa s tým vyrovnať, s dobrým kódom editora, zvyknúť si na presne zvážiť zátvorky a čiarky. PHP však nekontroluje typy údajov (to je karma moderného programovania) a umožňuje vývojárovi praktizovať sémantické chyby.

Pravidlo na kontrolu typov premenných alebo ich vlastných nápadov na transformáciu sémantiky do syntaxe - často neúplný luxus. Toto je strata rýchlostí skriptov, čitateľnosť kódu, ... preto je vždy nevyhnutná jednoduchosť v kódovaní.

PHP má významnú negatívnu vlastnosť: keď dôjde k neistote, skript jednoducho visí. Nie všetky debuggery sa vyrovnávajú s nepredvídanými okolnosťami a veľa závisí od skúseností a intuície developera. Čím ľahší algoritmus, aktívnejšie informácie sú štruktúrované, tým viac šancí na nájdenie chyby alebo nie, aby to vôbec neumožnilo.

Je charakteristické, že keď sa objavili prvé polia, boli navrhnuté možnosti dát vo forme konštrukcií - neohrabaný pokus o vytvorenie niečoho z rôznych typov údajov. Prvý prežil a získal novú efektívnu syntax, druhý išiel dole.

Jednoduché a asociatívne polia

Nahrávanie dvojrozmerného poľa je ďalší pár konzol "[" a "]", napríklad: $ ASRCDATA znamená, že príťažlivé na pole poľa, ktorý je súčasťou $ Asrcdata Array. V PHP neexistuje žiadna požiadavka na deklarovanie údajov vopred. Akékoľvek informácie môžu byť vždy kontrolované na existenciu.

Veľmi efektívne vytvárať niečo len vtedy, ak je to potrebné, vo forme, v ktorom sa vzal, a zničil, keď zmizol potrebu. Pomocou tlačidiel (indexov) Zmysluplné mená môžete získať čitateľné návrhy, zmysluplné v kontexte aktuálnej polohy v algoritme:

$ Aanketa ["Názov"] \u003d "Ivanov";
$ Aanketa ["vek"] \u003d 42;
$ Aanketa ["práca"] \u003d "režisér";
$ Aanketa ["Active"] \u003d TRUE;
$ ATABLE \u003d $ Aanketa;

$ Aanketa ["Name"] \u003d "Petrov";
$ Aanketa ["vek"] \u003d 34;
$ Aanketa ["práca"] \u003d "manažér";
$ Aanketa ["Active"] \u003d TRUE;
$ ATABLE \u003d $ Aanketa;

$ Aanketa ["NAME"] \u003d "AFANASYEV";
$ Aanketa ["vek"] \u003d 28;
$ Aanketa ["práca"] \u003d "pracovník";
$ Aanketa ["Active"] \u003d FALSE;
$ ATABLE \u003d $ Aanketa;

$ SONE. \u003d IMLODE (";", $ ATABLE). "
"; // druhé PHP pole v reťazci
$ Sone. \u003d $ ARTABE ["PRÁCA"]; // odvolanie na jeden prvok druhého poľa

Výsledok tohto príkladu (prvé pole je obvyklé, klávesy v ňom začínajú 0, druhé pole je asociatívne, v ňom štyri klávesy: "Názov", "vek", "práca", "aktívny"):

$ Sone \u003d "Petrov; 34; Manažér;
Manažéra ";

V tomto jednoduchom príklade môžete vidieť, ako možno vytvoriť vytvorený dotazník pre všetkých zamestnancov. Môžete vytvoriť rad zamestnancov s indexmi na číslach tabliet a ak je potrebný konkrétny zamestnanec, vyberte ho na číslo tabuľky.

Ak existujú rozdelenia v organizácii, alebo existujú sezónne pracovníci, alebo sa vyžaduje samostatne prideliť pracovné dôchodcov, ... návrh "PHP-Array" dizajn v poli je veľmi pohodlný, ale nikdy nenechávaný rozmerom. Dva alebo tri rozmery - limit pre efektívne riešenie.

Kľúče pre prácu s poliami

Ak som na záleží na tom, ako je všetko usporiadané, v posledných rokoch tradícia binárnej éry v posledných rokoch, keď programátor chcel presne vedieť, ako sú prvky poľa uložené, a chceli mať priamy prístup, boli Úplne zabudnuté. Existuje mnoho kódov znakov, ktoré zaberá nie jeden bajty v pamäti. Slovo "bit" môžete teraz nájsť čokoľvek v operáciách na horúčku, ale vyhľadávanie v PHP pole je samostatná téma. Prístup k položkám môže byť jednoduchý a asociatívny. V prvom prípade sú prvky poľa (s niektorým z typov dostupných v PHP) očíslované 0, 1, 2, ... V druhom prípade programátor určuje svoj vlastný index, označovaný ako "kľúč" Prístup k požadovanej hodnote.

$ Aline ["ovocie"] \u003d "oranžová"; // tu PHP-Key Array \u003d "ovocie"

alebo (takže všetko je správne s kódovaním stránky a kódom):

$ ALINE \u003d ICONV ("UTF-8", "CP1251", "oranžová");

Pri pridávaní novej hodnoty do radu $ aline:

$ Aline \u003d ICONV ("UTF-8", "CP1251", "pic");
$ Aline \u003d ICONV ("UTF-8", "CP1251", "Cucumber");
$ ALINE \u003d ICONV ("UTF-8", "CP1251", "baklažán");

výsledkom vykonávania cyklu:

fOREACH ($ ALINE AS $ CK \u003d\u003e $ CV)
$ Kužeľ. \u003d $ Ck. "\u003d". $ Cv. "
";
}

sa získa:

ovocie \u003d oranžová
0 \u003d broskyňa
zelenina \u003d uhorka
1 \u003d baklažán

PHP-kľúč poľa pri pridávaní "broskyňových" a "baklažárenských" prvkov sa vytvorí postupne od 0, a keď špecifikuje jeho hodnotu bude rovná tejto hodnote.

Odstránenie prvkov z poľa

Najjednoduchší spôsob je spracovanie. V tomto prípade je napríklad v dôsledku realizácie cyklu, zobrazí sa zdroj zdroja a vytvorí sa nový prvok, do ktorého nie sú jednoducho zaznamenané zbytočné prvky.

Môžete to urobiť jednoduchšie. Ak platí posledný príklad:

unseta ($ aline); // Vymazať prvok PHP Array

výsledkom bude:

ovocie \u003d oranžová
zelenina \u003d uhorka
1 \u003d baklažán

Možnosti manipulačného poľa prvky môžu byť vytvorené nastavenou. Napríklad pomocou funkcií: Implude () a explodovať (), môžete napísať PHP pole do reťazca s jedným separátorom a demontovať späť do iného poľa - na inom oddeľovači.

Ak chcete jednoducho odstrániť pole na PHP, stačí na to, aby ste napísali: Unset ($ ALINE);

Je to dosť.

Vyhľadávanie v poli

PHP obsahuje špeciálne vyhľadávanie a in_array () špecifické funkcie, ale skôr, ako sa rozhodnete ich použiť, mali by ste zvážiť vyhľadávanie v PHP pole na vlastnú päsť.

Akýkoľvek projekt má špecifické navrhnuté polia, najmä keď je časť sémantiky prenesená do syntaxe a je prezentovaná s množinou pomerne špecifických zmysluplných kľúčov. To vám umožní vykonať vlastné funkcie vyhľadávania, ktoré možno tiež odkazovať.

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

$ Prvky \u003d pole ("text", "inline", "textrun", "odkaz", "PresfeEXText", "TextReak",
"Listitem", "Listitemrun", "tabuľka", "obrázok", "objekt", "poznámka pod čiarou",
"Endnote", "Zaškrtávacie políčko", "textbox", "pole", "riadok");

$ funkcie \u003d pole ();

pre ($ i \u003d 0; $ I< count($elements); $i++) {
$ Funkcie [$ i] \u003d "pridať". $ Prvky [$ i];
}

Výsledkom je, že pole $ funkcie dostane pole $ prvky, to znamená, že mená reálnych funkcií, ktoré vykonávajú prácu so skutočnými prvkami dokumentu.

Volanie pre $ prvky Funkcia $ funkcie, môžete získať dokonalé vyhľadávanie a rýchly výsledok.

Triedenie prvkov

Úloha triedenia dát je dôležitá a PHP ponúka niekoľko funkcií pre túto funkciu: Triediť (), RSEP (), Asort (), Ksort (), ... Vzostupne a zostupné prvky Druhé dve funkcie si zachovávajú vzťahy medzi kľúčmi a hodnotami. Niekedy má zmysel zmiešať hodnoty poľa náhodne - shuffle ().

Pomocou funkcií PHP na triedenie by ste nemali zabúdať, že prvky nemusia mať rôzne typy, ale nie úplne prirodzený obsah. V prvom rade je potrebné veľmi starostlivo pozrieť na triedenie riadkov obsahujúcich ruské písmená, triedenie dátumu, ako aj čísla, ktoré sú zaznamenané v rôznych formátoch.

Najlepší spôsob, ako napísať nezávislé rozhodnutie, v každom prípade, v štádiu testovania skriptu, je manuálne triedenie. Pomôže to poskytovať nepredvídané situácie.

Riadkové polia

Vďaka funkciám IMLODE () a Explode () je možné pole ľahko transformovať do reťazca a vrátiť sa späť. To vám umožní ukladať údaje v kompaktnom reprezentácii a podľa potreby ich nasadiť na pohodlný stav.

Pole, ktorým čelí reťazec otvára nové funkcie. Úlohou vyhľadávania kľúčových slov v texte si napríklad vyžaduje, aby sa zistený nebol opäť nepridaný.

$ Csrcline \u003d "Textový text ListiteMrun TextBox Listitem TextBox Začiarknite políčko Začiarknite políčko Textbox Poznámka pod čiarou";

$ Asrc \u003d explodovať (", $ csrclin);
$ cdstline \u003d "";

pre ($ i \u003d 0, $ i< count($aSrc); $i++) {
$ cfind \u003d "[". $ Asrc [$ i]. "]";
Ak (! Is_integer (Stross ($ CDSTLINE, $ CFIND))) (
$ cdstline. \u003d $ cfind;
}
}
$ adst \u003d explodovať ("] [", $ cdstline);

$ Kužeľ \u003d implodovať (";, $ adst);

V dôsledku toho sa variabilná premenná $ kužeľ dostane iba hodnoty zo zdrojovej linky, ktoré sa nachádzajú len raz: "Text; ListiteMrun; TEXTBOX; Listitem; Kontrola; Box; Začiarknite políčko; Poznámka pod čiarou."

Ruský jazyk v klávesoch a hodnotách

Neodporúča sa používať čokoľvek súvisiace s národnými kódmi v syntaktických štruktúrach. Rusky, podobne ako všetky ostatné jazyky, ktorých symboly presahujú rámec limitov A-Z, nevytvárajú problémy, zatiaľ čo v oblasti dátovej oblasti, ale nie v syntaxe kódu. Niekedy dokonca jednoduchá úloha na PHP "Výstup poľa na tlačiareň alebo na obrazovke" povedie k "Krakojarm" a častejšie zastaví skript.

PHP - verný jazyk a tolerantný odkazuje na národné kódovanie, ale existuje veľa situácií, keď sa vykonaná práca musí byť vykonaná len preto, že na správnom mieste a v správny čas vyskočí kľúčovú hodnotu, rozpoznať, ktorá nebude možné.

PHP Syntax a jazykové prostredie

Treba pripomenúť, že syntax PHP je jedna, ale návrhy tejto syntaxe "Deal" s inými aplikáciami, s operačným systémom, s možnosťami hardvéru. Existuje mnoho možností, nikdy nie je možné predvídať.

Pravidlo "V Kódexe je len kód, a pri vstupe, vo vnútri a na produkte existuje každé informácie" pomôžu vyhnúť sa nepredvídaným prekvapeniam. Hodnota PHP v poli môže byť "ruština", ale kľúč by sa mal syntakticky správny, nielen z pozícií tohto jazyka, ale aj z hľadiska jeho práce.

Už som používal funkciu Array_Search () pre nájdenie hodnôt v poli, pretože opakovane počul a čítal, že funguje výrazne rýchlejšie ako vyhľadávanie poľa v cykle, ale ako rýchlejšie to nevedelo. Nakoniec dostal ruky, aby ste skontrolovali a vypočítať.

Porovnajte rýchlosť vyhľadávania v poli s použitím tejto funkcie s obvyklou povrchovou matice v foreach aj keď cyklov. Na 10-100 prvkach poľa, rozdiel v neviditeľnom a čas tak málo, že môžu byť prístavisko. Ale pre veľké polia bol rozdiel veľmi významný. S zvýšením veľkosti poľa podľa objednávky sa čas hľadania výrazne zvýšil. S stotisíc kusov, rýchlosť foreach klesol na 0,013 sekundy, aj keď zároveň - na 0,017, a to napriek skutočnosti, že Array_Search () spomalil, ale stále zostával o poriadok rýchlejšie - 0,004 sekundy. Pre veľký skript bežiaci s veľkými poliami, výmena vyhľadávania v cykle vyhľadávať pomocou Array_search () nebude vôbec "FLA Optimalizácia".

V tejto súvislosti som si spomenul na nedávnu diskusiu s jedným z kolegov v práci - o tom, či potrebuje programátor poznať všetky tieto vstavané funkcie jazyka, alebo "programátor programátor je programátora" a všeobecné vedomosti. Bez toho, aby som išiel s odôvodnením tohto skladu mysle, myslím si, že je stále potrebné poznať funkcie, možno nie celú syntaxáciu v detailoch, ale aj keď sú tieto funkcie a že môžu vo všeobecnosti.

UPD: Potrebujete aj programový sklad mysle, tiež potrebný! A starostlivosť s pamäťou nezabráni (inšpirovaný prestávka a rozsah :)

Pod kódom skriptu habraracine, ktorý vypočítal čas:

Mass $ \u003d 100000; // počet hodnôt v poli, v ktorom budeme hľadať
$ vyhľadávanie \u003d 50 000; // V poli budeme hľadať túto hodnotu
$ first_result \u003d pole (); // Array výsledkov, na výpočet priemernej hodnoty prvú možnosť
$ Druhý_result \u003d pole (); // Array výsledkov, na výpočet priemernej hodnoty druhej možnosti
$ tretí_result \u003d pole (); // rad výsledkov na výpočet priemernej hodnoty tretej možnosti

// Vytvorte a vyplňte pole
$ test_array \u003d rozsah (0, $ masm-1); // ďakujem selenit))

/*
$ test_array \u003d pole ();
pre ($ i \u003d 0, $ i<$mass; $i++)
{
$ test_array \u003d $ i;
}
*/

// cyklus na počítanie stredných hodnôt
pre ($ d \u003d 0; $ d<30; $d++) {

// *************** vyhľadávanie Array_Search *******************

// Spustite počítanie času
$ TIME_START \u003d microtime (1);
// Vyhľadávanie
$ Key \u003d array_search ($ search, $ test_array, true);
// ak sa našiel
Ak ($ kľúč! \u003d\u003d false) // potrebujete! \u003d\u003d a nie! \u003d, pretože počet prvých prvkov je 0
{
Echo $ test_array [$ tlačidlo];
}
$ Time_end \u003d mikrotime (1);
// Koniec počítania počítania

// Napíšte pole hodnôt
$ first_result \u003d $ time_end - $ time_start;

// **************** Hľadať podľa poli s foreachom cyklom ********************

// Spustite počítanie času
$ TIME_START \u003d microtime (1);
// hľadať sám
foreach ($ test_array ako $ ta)
{
IF ($ TA \u003d\u003d $ SEARCH)
{
Echo $ ta;
Prestávka;
}
}
$ Time_end \u003d mikrotime (1);
// Koniec počítania počítania

// Napíšte pole hodnôt
$ Druhý_result \u003d $ time_end - $ time_start;

// **************** Hľadať podľa poli s cyklom, zatiaľ čo ********************

// Spustite počítanie času
$ TIME_START \u003d microtime (1);

// určiť dĺžku poľa
$ Count \u003d počet ($ test_array);
$ j \u003d 0;
// hľadať sám
Zatiaľ čo ($ j<$count)
{
Ak ($ test_array [$ j] \u003d\u003d $ search) // ak sa nachádza
{
Echo $ test_array [$ j];
Prestávka;
}
$ j ++;
}
$ Time_end \u003d mikrotime (1);
// Koniec počítania počítania

// Napíšte pole hodnôt
$ Tretí_result \u003d $ time_end - $ time_start;
}

$ SREDNNEE1 \u003d ARRAY_SUM ($ FIRST_RESULT) / COUNT ($ FIRST_RESULT);
$ SREDNNEE2 \u003d ARRAY_SUM ($ DRUHY_RESULT) / COUNT ($ druhý_result);
$ SREDNNEE3 \u003d ARRAY_SUM ($ tretí_Result) / počet ($ tretí_result);

Printf ("Prvý kód je v priemere za:% .7f sekúnd", $ SREDNEE1);
Printf ("druhý kód je vyrobený v priemere za:% .7f sekundy", $ SREDNEE2);
Printf ("Tretí kód je vyrobený v priemere za:% .7f sekundy", $ SREDNNEE3);

// Výsledok:
// Prvý kód sa vykonáva v priemere za: 0,0000295 sekúnd
// druhý kód je vyrobený v priemere: 0,0153386 sekúnd
// tretí kód vykonaný v priemere za: 0.0226001 sekúnd



Páči sa vám článok? Zdieľaj to