Contacte

PHP găsi cheie după valoare. PHP array_search: Căutați o valoare într-o matrice. Verificarea prezenței unei valori într-o matrice. funcția in_array().

Adesea, atunci când scrieți cod, trebuie să verificați dacă o anumită valoare a elementului există într-o matrice. Astăzi ne vom uita la câteva funcții cu care puteți face acest lucru.

Verificarea prezenței unei valori de element într-o matrice poate fi folosită pentru a rezolva diverse probleme de programare.

Putem obține diverse matrice din baza noastră de date și putem verifica prezența unei anumite valori în ea. Valoarea dorită poate fi transmisă și de la utilizatorul scriptului nostru atunci când, de exemplu, caută ceva. Pe baza rezultatelor unei astfel de căutări, puteți efectua anumite acțiuni. Totul depinde de sarcina specifică la îndemână, totuși, algoritmii pentru căutarea unei valori într-o matrice vor fi aceiași.

Astăzi le vom privi.

Verificarea prezenței unei valori într-o matrice. funcția in_array().

Funcţie in_array() ne va permite să verificăm prezența oricărei valori în matrice.

Dacă rezultatul muncii sale este de succes și elementul dorit este găsit în matrice, atunci funcția va reveni Adevărat, acesta este adevarul."

Funcția preia 2 parametri necesari:<Что ищем>Și<Где ищем>.

De asemenea, poate lua încă un parametru opțional:<Тип данных>. Dacă acest al treilea parametru opțional este setat la Adevărat, apoi se verifică și tipul de date. Adică, „2” și 2 nu vor fi același lucru. În primul caz este un șir, în al doilea este un număr. Și apoi întreaga funcție in_array() nu va returna o valoare Adevărat.

De asemenea, trebuie să rețineți că funcția efectuează comparații sensibile la majuscule și minuscule.

Să vedem cum funcționează această funcție folosind un exemplu simplu.
Avem nevoie de un fel de matrice. Folosind funcția, vom verifica prezența unei valori în matrice și vom afișa un mesaj specific pe ecran.

După execuție, funcția va afișa mesajul „Da”, deoarece elementul „Marina” este prezent în matricea noastră.

Schimbați primul parametru din funcție cu un element inexistent și veți vedea mesajul „Nu”.

Verificarea prezenței unei valori într-o matrice. funcția array_search().

Există o altă funcție de căutare array_search(), care, spre deosebire de precedentul, va returna cheia elementului găsit. Acest lucru, la rândul său, poate fi util dacă lucrăm cu o matrice asociativă.

Funcția preia aceiași parametri ca și cea anterioară. În acest caz, al treilea parametru este, de asemenea, opțional.

Să vedem cum poate fi folosit atunci când lucrați cu o matrice asociativă.

"octombrie","bani"=>200,"name"=>"Mila"); $key = array_search("Mila",$Mass1); if($key) echo $key; ?>

În acest caz, vom vedea „nume” pe ecran, adică cheia elementului dorit cu valoarea „Mila”.

Aceste două funcții sunt foarte asemănătoare și diferă în esență doar prin valoarea returnată.

Găsirea unei valori într-o matrice multidimensională

Dar dacă lucrăm cu o matrice multidimensională? La urma urmei, elementele sale vor fi alte matrice.

Aici algoritmii despre care am discutat deja nu vor funcționa.

De fapt, nu este atât de complicat, trebuie doar să complici puțin întregul mecanism și să folosești o buclă, de exemplu, pentru fiecare(), care funcționează excelent cu matrice.

Să presupunem că avem o matrice multidimensională. Valorile sale imediate sunt alte matrice care pot conține valoarea dorită a elementului.

Tot ce trebuie să faceți este să parcurgeți elementele matricei originale pentru fiecare(). Fiecare element al acestui tablou va fi analizat într-o cheie ($key) și o valoare ($value).

Valoarea va fi fiecare dintre matricele situate în interiorul matricei multidimensionale principale. Vom lucra cu aceste valori, căutând în fiecare matrice internă valoarea elementului dorit.

Dacă este găsit, vom afișa un mesaj în care se afirmă că un astfel de element există, iar dacă nu, vom afișa un alt mesaj că un astfel de element nu există.

Să vedem toate acestea cu exemplu de cod:

"anna","id" =>234); $Mas2 = array("name"=>"anton","id"=>24); $Mas2 = array("name"=>"ivan","id"=>007); foreach($Mass2 as $key => $value) ( ​​​​$name .= in_array("ivan",$value); ) if($name) echo "OK! Element aici!"; else echo "Nu au element!"; ?>

După cum puteți vedea, mai întâi declarăm matricea multidimensională în sine.

Mai mult, aici trebuie să scrieți nu doar un semn egal, ci „.=”.

Acest lucru se face astfel încât variabila $name să nu fie suprascrisă la fiecare iterație, ci să fie completată. Până la urmă, dacă la prima iterație este găsit un element și valoarea „adevărat” este scrisă în variabila $name, dar la a doua iterație (adică în a doua matrice internă) valoarea dorită a elementului nu este prezentă. , atunci valoarea variabilei $name va fi pur și simplu suprascrisă și, în final, pur și simplu nu vom obține rezultatul corect.

După cum înțelegeți, rezultatul acestui cod va fi mesajul „OK! Element este aici!

Încercați să schimbați elementul pe care îl căutați cu unul inexistent și veți vedea mesajul „Fără element!”

Desigur, atunci când un anumit element este găsit sau nu, nu putem doar să afișăm mesaje, ci să facem și alte acțiuni. Totul depinde de ceea ce trebuie să faci. De exemplu, dacă valoarea dorită este în matrice, puteți oferi utilizatorului câteva informații specifice etc.

Asta e tot pentru azi! Sper că lecția a fost clară și utilă! Încercați să scrieți singur cod similar pentru a înțelege pe deplin totul.

Și aștept comentariile voastre.

Partajați lecția cu prietenii dvs. folosind butoanele sociale. rețelele situate mai jos. Și, de asemenea, abonați-vă la actualizările blogului. Am strâns deja o arhivă destul de bună de materiale utile și acestea vor fi doar completate!

Vă doresc o programare reușită!

Anna Kotelnikova a fost cu tine!

(PHP 4 >= 4.0.5, PHP 5)

array_search -- Caută o valoare dată într-o matrice și returnează cheia corespunzătoare dacă are succes

Descriere

amestecat array_search(ac mixt, carul de fân matrice [, bool strict])

Caută în carul de fân valoarea acului și returnează cheia dacă este prezentă în matrice, FALS in caz contrar.

Cometariu: Dacă acul este un șir, se efectuează o comparație care ține seama de majuscule și minuscule.

Cometariu: Până la PHP 4.2.0, array_search() returnat dacă nu reușește NULîn loc de FALS .

Dacă treceți valoarea ADEVĂRAT ca un al treilea parametru opțional pentru strict , funcția array_search() va verifica, de asemenea, tipul de ac din matricea carului de fân.

Dacă acul este prezent în carul de fân de mai multe ori, prima cheie găsită va fi returnată. Pentru a returna cheile pentru toate valorile găsite, utilizați funcția array_keys() cu un parametru opțional search_value.


Exemplul 1: Exemplu de utilizare array_search()

$array = array(0 => "albastru" , ​​1 => "roșu" , 2 => 0x000000 , 3 => "verde" , 4 => "roșu" );$key = array_search ("roșu" , $matrice ); // $key = 1;
$key = array_search("verde" , $array ); // $key = 2; (0x000000 == 0 == „verde”)
$key = array_search ("verde" , $array , true ); // $key = 3;
?>
Atenţie

Această funcție poate reveni ca valoare booleană FALS, o valoare non-booleană care este distribuită FALS, de exemplu 0 sau „”. Pentru mai multe informații, consultați secțiunea Tip boolean. Utilizați operatorul === pentru a verifica valoarea returnată de această funcție.

Programarea este despre sintaxă și semantică. Primul este determinat de regulile limbajului, al doilea de experiența dezvoltatorului. În ceea ce privește matricele, dezvoltatorul poate încărca în mod specific sintaxa cu semantică. Acesta nu este încă un obiect, dar nu mai este o matrice în sensul tradițional. PHP vă oferă posibilitatea de a crea matrice de variabile de diferite tipuri, inclusiv ele însele. Un element de matrice poate fi o funcție, adică capacitatea de a încărca matricea cu un algoritm real, sens real.

Sintaxa este stabilă, dar se modifică de la o versiune la alta și este posibil să nu fie întotdeauna compatibilă chiar și de jos în sus. Portabilitatea programului este o realizare bine uitată a secolului trecut. Semantica evoluează și poate fi întotdeauna aplicată nu numai în orice versiune a oricărei limbi; A devenit o tradiție folosirea construcțiilor sintactice pentru a exprima ceea ce nici măcar nu era prevăzut de regulile limbii. Acest lucru poate fi cel mai ușor de înțeles folosind exemplul de matrice.

Construirea de tablouri

Array în PHP are o sintaxă și o funcționalitate convenabilă. Acest lucru poate fi descris în avans, dar este adesea convenabil să creați matrice din mers, după cum este necesar.

public $aNiciuna = array(); // tabloul este descris și nu conține nimic

public $aFact = array("avocado", "piersică", "cireș"); // această matrice are trei elemente

Crearea unui tablou în timp ce se verifică o condiție:

$cSrcLine = "linie de date analizată";

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

if (checkFunc($cSrcLine, $cUserLine) (

$aResult = "Da"; // adaugă la matricea PHP

$aResult = "Nu";

Ca urmare a executării acestui exemplu, va fi creată o matrice de 13 elemente, ale căror valori vor fi doar șirurile „Da” sau „Nu”. Elementele vor primi indecși de la 0 la 12. Același efect poate fi obținut prin scrierea mai întâi a matricei PHP „viitoare” într-un șir:

$cFutureArray = "";

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

$cUserLine = inputUserLine(); // introduceți ceva

dacă ($i > 0) ( $cFutureArray .= "|"; )

if (checkFunc($cSrcLine, $cUserLine) ( $cFutureArray .= „Da”;

) else ( $cFutureArray .= „Nu”; )

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

Matrice multidimensionale

Multe sisteme de management al conținutului (CMS) folosesc matrice în mare măsură. Pe de o parte, aceasta este o bună practică, pe de altă parte, o face dificil de utilizat. Chiar dacă autorul înțelege doctrina „matrice PHP într-o matrice”, nu ar trebui să abuzeze de ea: nu numai dezvoltatorul va trebui să se obișnuiască cu notația complexă. Adesea, după un timp, creatorul însuși își va aminti mult timp ceea ce a scris la început:

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

"router" => array("routes" => array ("sa salută" => array(

"type" => "Zend\Mvc\Router\Http\Literal",

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

"controller" => "Helloworld\Controller\Index", "action" => "index",))))),

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

„Helloworld\Controller\Index” => „Helloworld\Controller\IndexController”))

Acesta este un exemplu de practică „Matrice PHP într-o matrice” din ZF 2. Nu foarte inspirant la început, dar funcționează și, fără îndoială, face ca acest cadru să aibă succes (exemplu din ZendSkeletonApplication/module/Helloworld/config/module.config.php) .

O matrice este un construct de date important în timpul proiectării și dezvoltării. Versiunea sa multidimensională a fost cândva populară, dar de-a lungul timpului a rămas nevoia de matrice de maximum două sau trei dimensiuni. Este mai simplu și mai clar în acest fel, iar din punct de vedere profesional, atunci când ceva începe să se înmulțească, înseamnă că ceva este greșit în declarația problemei sau în cod.

Simplu, accesibil și ușor de înțeles

Când creați o matrice într-o matrice în PHP, cel mai bine este să vă limitați la două sau trei niveluri. În ciuda stabilității și fiabilității PHP, acesta face erori la procesarea structurilor sintactice. Puteți suporta asta dacă aveți un editor de cod bun și vă obișnuiți să numărați cu precizie parantezele și virgulele. Cu toate acestea, PHP nu controlează tipurile de date (aceasta este karma programării moderne) și permite dezvoltatorului să practice erorile semantice.

Regula de a controla tipurile de variabile sau propriile idei pentru a transforma semantica în sintaxă este adesea un lux de neaccesibil. Aceasta este o pierdere a vitezei de script, a lizibilității codului, ... deoarece simplitatea în codificare este întotdeauna esențială.

PHP are o caracteristică negativă semnificativă: atunci când apare incertitudinea, scriptul pur și simplu se blochează. Nu toți depanatorii pot face față circumstanțelor neprevăzute și multe depind de experiența și intuiția dezvoltatorului. Cu cât algoritmul este mai simplu, cu atât informația este mai accesibilă, cu atât sunt mai mari șansele de a găsi o eroare sau de a o preveni cu totul.

Este caracteristic că atunci când au apărut primele matrice, au fost propuse variante de date sub formă de structuri - o încercare stângace de a crea ceva din diferite tipuri de date. Primul a supraviețuit și a dobândit o nouă sintaxă eficientă, în timp ce cel din urmă a devenit istorie.

Matrice simple și asociative

Notația pentru o matrice bidimensională este o altă pereche de paranteze „[” și „]”, de exemplu: $aSrcData înseamnă accesarea unui element de matrice inclus în matricea $aSrcData. Nu există nicio cerință de a declara datele în prealabil în PHP. Orice informație declarată poate fi întotdeauna verificată pentru existență.

Este foarte eficient să creezi ceva doar atunci când este nevoie, în forma în care a fost cerut și să-l distrugi atunci când nevoia a dispărut. Folosind nume semnificative ca chei (indexuri), puteți obține constructe lizibile care sunt semnificative în contextul locului curent în algoritm:

$aAnketa["name"] = "Ivanov";
$aAnketa[„varsta”] = 42;
$aAnketa["work"] = "Director";
$aAnketa["activ"] = adevărat;
$aTable = $aAnketa;

$aAnketa["name"] = "Petrov";
$aAnketa[„varsta”] = 34;
$aAnketa["work"] = "Manager";
$aAnketa["activ"] = adevărat;
$aTable = $aAnketa;

$aAnketa["name"] = "Afanasyev";
$aAnketa[„varsta”] = 28;
$aAnketa["work"] = "Lucrător";
$aAnketa["activ"] = fals;
$aTable = $aAnketa;

$sOne .= implod ("; ", $aTable) . "
"; // a doua matrice PHP într-un șir
$sOne .= $aTable[„lucrare”]; // accesarea unui element din a doua matrice

Rezultatul acestui exemplu (prima matrice este normală, cheile din ea încep de la 0, a doua matrice este asociativă, are patru chei: „nume”, „vârstă”, „muncă”, „activ”):

$sOne = "Petrov; 34; Manager; 1
Administrator";

Acest exemplu simplu arată cum un chestionar creat poate fi aplicat tuturor angajaților. Puteți crea o matrice de angajați cu indici după numere de personal și, dacă aveți nevoie de un anumit angajat, selectați-l după numărul de personal.

Dacă organizația are divizii, sau există lucrători sezonieri sau trebuie să identificați separat pensionarii care lucrează, ... designul „Matrice PHP într-o matrice” este foarte convenabil, dar nu ar trebui să vă lăsați niciodată purtat de dimensiune. Două sau trei dimensiuni reprezintă limita pentru o soluție eficientă.

Chei pentru lucrul cu matrice

Dacă înainte conta cum era aranjat totul, atunci în ultimii ani tradițiile erei binare, când programatorul dorea să știe exact cum erau stocate elementele unui tablou și dorea să aibă acces direct la ele, au fost complet uitate. Au apărut multe codificări de caractere care ocupă mai mult de un octet în memorie. Cuvântul „bit” poate fi găsit acum doar în operațiunile de căutare de biți, dar căutarea într-o matrice PHP este un subiect separat. Accesul la elemente poate fi simplu și asociativ. În primul caz, elementele matricei (având oricare dintre tipurile disponibile în PHP) sunt numerotate 0, 1, 2, ... În al doilea caz, programatorul își specifică propriul index, adesea numit „cheie”, pentru a accesa valoarea dorită.

$aLine["fruit"] = "portocale"; // aici cheia matricei PHP = "fructe"

sau (pentru ca totul să fie corect, respectând codificarea și codul paginii):

$aLine = iconv("UTF-8", "CP1251", "orange");

Când adăugați o nouă valoare la tabloul $aLine:

$aLine = iconv("UTF-8", "CP1251", "piersică");
$aLine = iconv("UTF-8", "CP1251", "castravete");
$aLine = iconv("UTF-8", "CP1251", "vinete");

ca rezultat al executării buclei:

foreach ($aLine ca $ck => $cv) (
$cOne .= $ck . „=". $cv . "
";
}

vor fi primite:

fruct=portocale
0=piersică
legume=castravete
1=vinete

Cheia de matrice PHP la adăugarea elementelor „piersică” și „vinete” se formează secvenţial de la 0, iar la specificarea valorii acesteia va fi egală cu această valoare.

Eliminarea elementelor dintr-o matrice

Cel mai simplu mod este în timpul procesării sale. În acest caz, de exemplu, ca urmare a executării unei bucle, matricea originală este scanată și se formează una nouă, în care pur și simplu nu sunt scrise elemente inutile.

Ar putea fi mai ușor. Dacă aplicăm ultimul exemplu:

unset($aLine); // elimină elementul de matrice PHP

atunci rezultatul va fi:

fruct=portocale
legume=castravete
1=vinete

Există multe opțiuni pentru manipularea elementelor matricei. De exemplu, folosind funcțiile: implode() și explode(), puteți scrie o matrice PHP într-un șir cu un delimitator și o analizați înapoi într-o altă matrice folosind un delimitator diferit.

Pentru a șterge pur și simplu o întreagă matrice în PHP, scrieți: unset($aLine);

E destul.

Căutați într-o matrice

PHP conține funcții speciale de căutare și in_array(), dar înainte de a vă decide să le utilizați, ar trebui să vă gândiți să efectuați singur căutări în matrice PHP.

Orice proiect are matrice construite specifice, mai ales atunci când o parte din semantică este transferată în sintaxă și este reprezentată de un set de chei semnificative foarte specifice. Acest lucru vă permite să efectuați propriile funcții de căutare, care pot fi, de asemenea, etichetate într-un mod semnificativ.

În PHP, puteți apela funcții al căror nume este determinat în timpul execuției programului. Un exemplu foarte practic din biblioteca PHPWord, care vă permite să citiți și să creați documente MS Word:

$elements = array("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
„ListItem”, „ListItemRun”, „Tabel”, „Imagine”, „Obiect”, „Notă de subsol”,
„Notă de final”, „CheckBox”, „TextBox”, „Field”, „Line”);

$functii = array();

pentru ($i = 0; $i< count($elements); $i++) {
$functions[$i] = „adăugați” . $elemente[$i];
}

Ca rezultat, matricea $functions va primi valorile matricei $elements, adică numele funcțiilor reale care funcționează cu elemente reale ale documentului.

Apelând $functions pe $elements, puteți obține o căutare perfectă și rezultate rapide.

Sortarea articolelor

Sarcina de sortare a datelor este importantă și PHP oferă mai multe funcții pentru aceasta: sort(), rsort(), asort(), ksort(), ... Elemente crescătoare și descrescătoare, a doua două funcții stochează relațiile dintre chei și valori. . Uneori este logic să amestecați aleatoriu valorile matricei - shuffle().

Când utilizați funcții PHP pentru sortare, nu trebuie să uitați că elementele pot avea nu numai tipuri diferite, ci și conținut nu complet natural. În primul rând, trebuie să fii foarte atent la sortarea șirurilor care conțin litere rusești, sortarea datelor, precum și a numerelor care sunt scrise în diferite formate.

Cel mai bun mod de a scrie singur o soluție ideală, cel puțin în etapa de testare a scriptului, este sortarea manuală. Va ajuta la anticiparea situațiilor neprevăzute.

Matrice de șiruri

Datorită funcțiilor implode() și explode(), un tablou poate fi ușor transformat într-un șir și returnat înapoi. Acest lucru vă permite să stocați datele într-o reprezentare compactă și să le extindeți într-o stare convenabilă, după cum este necesar.

O matrice convertită într-un șir deschide noi posibilități. De exemplu, sarcina de a căuta cuvinte cheie într-un text necesită ca ceea ce este găsit să nu fie adăugat din nou.

$cSrcLine = "Text text ListItemRun TextBox ListItem TextBox Casetă de selectare CheckBox TextBox Notă de subsol";

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

pentru ($i=0; $i< count($aSrc); $i++) {
$cFind = "[" . $aSrc[$i] . „]”;
dacă (! is_integer(strpos($cDstLine, $cFind))) (
$cDstLine .= $cFind;
}
}
$aDst = explode("][", $cDstLine);

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

Ca urmare, variabila $cOne va primi doar acele valori din șirul sursă care apar acolo o dată: „Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Footnote”.

Limba rusă în chei și semnificații

Nu este recomandat să folosiți nimic legat de codificări naționale în structurile sintactice. Rusa, ca toate celelalte limbi ale căror caractere se extind dincolo de a-z, nu va crea probleme, fiind în regiunea de date, dar nu în sintaxa codului. Uneori, chiar și o sarcină simplă în PHP „a ieși o matrice către imprimantă sau pe ecran” va duce la „bucăți nebunești”, iar cel mai adesea scriptul se va opri pur și simplu.

PHP este un limbaj loial și este tolerant cu codificările naționale, dar există multe situații în care volumul de lucru finalizat trebuie reluat doar pentru că o valoare cheie apare la locul potrivit și la momentul potrivit, ceea ce nu este posibil recunoaşte.

Sintaxă PHP și mediu de limbaj

Trebuie amintit că sintaxa PHP este un lucru, dar constructele acestei sintaxe „se ocupă” cu alte aplicații, cu sistemul de operare, cu opțiunile hardware. Există multe opțiuni, nu este niciodată posibil să asigurați totul.

Regula „în cod există doar cod, dar există tot felul de informații la intrare, în interior și la ieșire” va ajuta la evitarea surprizelor neprevăzute. O valoare PHP dintr-o matrice poate fi „rusă”, dar cheia acesteia trebuie să fie corectă din punct de vedere sintactic nu numai din punctul de vedere al limbajului dat, ci și din punctul de vedere al mediului său de operare.

Una dintre operațiunile principale atunci când lucrați cu matrice este căutarea unei anumite valori. Funcția PHP array_search() este concepută pentru aceasta. Este capabil să proceseze atât colecții unidimensionale, cât și asociative, returnând cheia valorii căutate dacă se găsește în matrice.

Sintaxă

Descrierea oficială a funcției array_search() în PHP este următoarea:

Mixed array_search (valoare mixtă, matrice $colecție [, bool strict])

Parametrii de intrare:

  • $collection - matricea in care se va efectua cautarea;
  • valoare - valoarea dorită de orice tip;
  • strict este un indicator boolean opțional care stabilește un mecanism strict de comparare care conștientizează tipul.

Mecanismul de funcționare

Funcția PHP array_search() compară valoarea una câte una cu toate valorile din tabloul de colecție. În mod implicit, comparația este efectuată fără a ține cont de tipurile de operanzi. Această setare poate fi modificată prin setarea steagului strict la TRUE. Comparațiile de șiruri țin cont de majuscule și minuscule.

Dacă se găsește o potrivire, cheia corespunzătoare elementului găsit este returnată și funcția se oprește. Prin urmare, nu poate fi utilizat pentru a detecta mai multe apariții ale valorii dorite într-o matrice.

Dacă nu se găsesc potriviri, funcția va returna valoarea booleană FALSE.

Ar trebui să verificați rezultatul returnat folosind operatorul de egalitate strictă (===). Acest lucru este important deoarece funcția poate returna o valoare care este turnată la FALSE, cum ar fi 0 sau șirul gol.

Exemple de utilizare

Exemplul 1. Când treceți un tablou multidimensional la funcția PHP array_search(), rezultatul lucrării va fi cheia elementului căutat.

"iarna", "sezonul 2" => "primavara", "sezonul 3" => "vara", "sezonul 4" => "toamna"); $rezultat1 = array_search("iarna", $array); $rezultat2 = array_search("vara", $array); $rezultat3 = array_search("aprilie", $array); ?>

În acest exemplu, $result1 va fi setat la „season1”, $result2 va fi setat la „season3”, iar $result3 va fi setat la valoarea booleană FALSE deoarece șirul „april” nu apare în tabloul sursă.

Exemplul 2. Funcția PHP array_search() poate procesa și o matrice unidimensională, considerând cheile acesteia ca următorii indici numerici.

Variabila $result va fi setată la 1, conform indexului elementului „hunter” din $array.

Exemplul 3. Posibilă eroare la analiza rezultatului.

"Washington", 1 => "Adams", 2 => "Jefferson", 3 => "Madison", 4 => "Monroe"); $rezultat = array_search("Washington", $presedinti); dacă (!$rezultat) ( ecou „G. Washington nu a fost primul președinte al SUA”; ) ?>

Deci, fără a verifica rezultatul cu egalitate strictă, puteți obține un mesaj neașteptat că George Washington nu a fost primul președinte al Statelor Unite.

Exemplul 4: Se returnează doar cheia primei potriviri găsite.

Chiar dacă valoarea pe care o căutați apare de trei ori în matrice, funcția va returna doar primul rezultat găsit - 0. Pentru a găsi mai multe potriviri, este recomandat să utilizați funcția PHP array_keys().

Am folosit funcția array_search() de destul de mult timp pentru a căuta valori într-o matrice, deoarece am auzit și am citit în mod repetat că funcționează considerabil mai rapid decât căutarea printr-o matrice într-o buclă, dar nu am făcut-o. stiu cat de repede este. În sfârșit, am ajuns să verific și să număr eu.

Am comparat viteza de căutare printr-o matrice folosind această funcție cu căutarea obișnuită printr-o matrice în bucle foreach și while. Pe 10-100 de elemente de matrice, diferența este de neobservat și timpul este atât de scurt încât poate fi neglijat. Dar pentru matrice mari diferența s-a dovedit a fi destul de semnificativă. Pe măsură ce dimensiunea matricei a crescut cu un ordin de mărime, timpul de căutare a crescut și el semnificativ. Cu o sută de mii de elemente, viteza foreach a scăzut la 0,013 secunde și while - la 0,017, în timp ce array_search() a încetinit și el, dar a rămas cu un ordin de mărime mai rapid - 0,004 secunde. Pentru un script mare care lucrează cu matrice mari, înlocuirea unei căutări într-o buclă cu o căutare folosind array_search() nu va fi deloc o „optimizare de purici”.

În acest sens, mi-am amintit de o discuție recentă cu unul dintre colegii mei de la serviciu despre dacă un programator trebuie să cunoască toate aceste funcții de limbaj încorporate sau dacă „mentalitatea unui programator” și cunoștințele generale sunt suficiente. Fără să intru într-o discuție tocmai despre această mentalitate, cred că mai trebuie să cunoști funcțiile, poate nu toată sintaxa în detaliu, dar măcar ce funcții există și ce pot face în termeni generali.

UPD: ai nevoie și de mentalitatea unui programator! Și să fii atent cu memoria ta nu va răni (inspirat de break and range:)

Sub hack se află codul de script care a fost folosit pentru a calcula timpul:

$masa=100000; // numărul de valori din tabloul în care vom căuta
$search=50000; // vom căuta această valoare în tablou
$primul_rezultat=matrice(); // matrice de rezultate pentru a calcula valoarea medie a primei opțiuni
$al doilea_rezultat=matrice(); // matrice de rezultate pentru a calcula valoarea medie a celei de-a doua opțiuni
$al treilea_rezultat=matrice(); // matrice de rezultate pentru a calcula valoarea medie a celei de-a treia opțiuni

// creează și completează matricea
$test_array = interval(0, $masa-1); // Mulțumesc lui SelenIT))

/*
$test_array=array();
pentru ($i=0; $i<$mass; $i++)
{
$test_array=$i;
}
*/

// buclă pentru a calcula valorile medii
pentru ($d=0; $d<30; $d++) {

//*************** Căutați folosind array_search *******************

// Începeți să numărați timpul
$time_start = microtime(1);
// căutare
$key = array_search($search, $test_array, true);
// daca este gasit
if ($key!==FALSE) // este necesar!== și nu!=, deoarece numărul primului element este 0
{
echo $test_array[$key];
}
$time_end = microtime(1);
// sfârşitul numărării timpului

// scrie într-o matrice de valori
$first_result= $time_end - $time_start;

//*************** Căutați printr-o matrice cu o buclă foreach *******************

// Începeți să numărați timpul
$time_start = microtime(1);
// căutarea în sine
foreach ($test_array ca $ta)
{
dacă ($ta==$căutare)
{
echo $ta;
pauză;
}
}
$time_end = microtime(1);
// sfârşitul numărării timpului

// scrie într-o matrice de valori
$second_result= $time_end - $time_start;

//*************** Căutați printr-o matrice cu o buclă while *******************

// Începeți să numărați timpul
$time_start = microtime(1);

// determină lungimea matricei
$count=count($test_array);
$j=0;
// căutarea în sine
în timp ce ($j<$count)
{
if ($test_array[$j]==$căutare) // dacă a fost găsit
{
echo $test_array[$j];
pauză;
}
$j++;
}
$time_end = microtime(1);
// sfârşitul numărării timpului

// scrie într-o matrice de valori
$third_result= $time_end - $time_start;
}

$srednee1=sumă_matrice($primul_rezultat)/număr($primul_rezultat);
$srednee2=sumă_matrice ($rezultat_secunda)/număr ($rezult_secunda);
$srednee3=sumă_matrice ($treea_rezultat)/număr ($treea_rezultat);

Printf("primul cod completat în medie: %.7f secunde", $srednee1);
printf("al doilea cod completat în medie în: %.7f secunde", $srednee2);
printf("al treilea cod completat in medie in: %.7f secunde", $srednee3);

// rezultat:
// primul cod completat în medie: 0,0000295 secunde
// cod secund completat în medie: 0,0153386 secunde
// al treilea cod completat în medie: 0,0226001 secunde



Ți-a plăcut articolul? Împărtășește-l