PHP: array_search - căutare rapidă în matrice. PHP array_search: căutarea valorii în matrice Array search matrice multidimensională

(PHP 4 >= 4.0.5, PHP 5)

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

Descriere

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

Caută ac în carul de fân și returnează cheia, dacă există, în matrice, FALS in caz contrar.

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

Cometariu:Înainte de PHP 4.2.0, array_search() revenit la eșec NULîn loc de FALS .

Dacă treceți o valoare 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 de mai multe ori în carul de fân, prima cheie găsită va fi returnată. Pentru a returna cheile pentru toate valorile găsite, utilizați funcția array_keys() cu parametrul 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 boolean FALS, și o valoare non-booleană care este turnată la FALS, de exemplu, 0 sau „”. Consultați tipul boolean pentru mai multe informații. Utilizați operatorul === pentru a testa valoarea returnată de această funcție.

Am folosit funcția array_search() de ceva timp pentru a căuta valori într-o matrice, pentru că am auzit și am citit că este vizibil mai rapid decât căutarea printr-o matrice într-o buclă, dar nu știam cât de mult mai repede a fost. În sfârșit, am ajuns la verificare și numărare.

Am comparat viteza de căutare într-o matrice folosind această funcție cu iterația obișnuită a unei matrice în buclele foreach și while. La 10-100 de elemente de matrice, diferența este imperceptibilă, iar 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ă. Odată cu creșterea dimensiunii matricei cu un ordin de mărime, timpul de căutare a crescut, de asemenea, semnificativ. Cu 100.000 de elemente, 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 la 0,004 secunde. Pentru un script mare care funcționează cu matrice mari, înlocuirea unei căutări în buclă cu o căutare array_search() nu ar fi deloc o optimizare pentru purici.

În acest sens, mi-am amintit de o discuție recentă cu unul dintre colegii mei de la locul de muncă - despre dacă un programator trebuie să cunoască toate aceste funcții încorporate ale limbajului sau este un „modalitate de programator” și cunoștințe generale suficiente. Fără să intru într-o discuție chiar 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: avem nevoie de o mentalitate de programator, avem nevoie și de ea! Și mindfulness cu memorie nu va strica (inspirat de break and range:)

Sub habrakat, codul de script care a numărat timpul:

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

// creează și populează matricea
$test_array = interval(0, $masa-1); // multumesc SelenIT))

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

// bucla pentru calcularea mediilor
pentru ($d=0; $d<30; $d++) {

//*************** Căutare cu 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!== si nu!=, deoarece numarul primului element este 0
{
echo $test_array[$key];
}
$time_end = microtime(1);
// sfârșitul timpului de numărare

// scrie în tabloul de valori
$first_result= $time_end - $time_start;

//*************** Căutare matrice cu bucla foreach *******************

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

// scrie în tabloul de valori
$second_result= $time_end - $time_start;

//*************** Căutare matrice cu bucla while *******************

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

// determină lungimea matricei
$count=count($test_array);
$j=0;
// caută î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 timpului de numărare

// scrie în tabloul de valori
$third_result= $time_end - $time_start;
}

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

Printf("Primul cod executat în medie în: %.7f secunde", $srednee1);
printf("Al doilea cod executat în medie în: %.7f secunde", $srednee2);
printf("Al treilea cod executat în medie în: %.7f secunde", $srednee3);

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

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

Verificarea prezenței unei valori de element într-o matrice poate fi utilizată în rezolvarea diferitelor 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ă, cu toate acestea, algoritmii pentru găsirea unei valori într-o matrice vor fi aceiași.

Astăzi le vom revizui.

Verificarea dacă o valoare este într-o matrice. funcția in_array().

Funcţie in_array() ne va permite să verificăm dacă există o valoare într-o matrice.

Dacă rezultatul muncii sale este de succes și este găsit elementul dorit din matrice, atunci funcția va reveni Adevărat adică „adevăr”.

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

De asemenea, poate lua încă un parametru opțional:<Тип данных>. Dacă acest al treilea parametru opțional are o valoare Adevărat, apoi se verifică și tipul de date. Adică, „2” și 2 nu vor fi la fel. Î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ă o comparație sensibilă la majuscule și minuscule.

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

După finalizarea funcției, mesajul „Da” va fi afișat pe ecran, 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 dacă o valoare este î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ă. Cu toate acestea, al treilea parametru este, de asemenea, opțional.

Să vedem cum poate fi folosit cu un tablou asociativ.

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

În acest caz, vom vedea pe ecran „nume”, adică cheia elementului pe care îl căutăm 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 pe care i-am considerat deja nu vor funcționa.

De fapt, totul 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ă bine cu matrice.

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

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

Valoarea va fi fiecare dintre tablourile situate în interiorul matricei multidimensionale principale. Cu aceste valori vom lucra, căutând în fiecare matrice internă valoarea dorită a elementului.

Când găsim, vom afișa un mesaj că un astfel de element există, iar dacă nu, vom afișa un alt mesaj că nu există un astfel de element.

Să vedem toate acestea cu un 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 "Fără element!"; ?>

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

În același timp, este necesar să scrieți aici 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ă. La urma urmei, dacă la prima iterație elementul este găsit și valoarea „adevărat” este scrisă în variabila $name, iar la a doua iterație (adică în a doua matrice internă) nu există o valoare a elementului dorită, atunci valoarea variabilei $name va fi pur și simplu suprascrisă și, ca rezultat, pur și simplu nu vom obține rezultatul corect.

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

Încercați să schimbați elementul dorit cu unul inexistent și veți vedea mesajul „Nu au element!”.

Desigur, atunci când un anumit element este găsit sau nu, putem nu doar să afișăm mesaje, ci și să facem și alte acțiuni. Totul depinde de ceea ce trebuie să faci. De exemplu, dacă există o valoare dorită î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 un cod similar pentru a înțelege totul complet.

Și aștept comentariile voastre.

Distribuie lecția cu prietenii tăi folosind butoanele sociale. rețelele de mai jos. De asemenea, abonați-vă la actualizările blogului. Am adunat 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!

Programarea este despre sintaxă și semantică. Primul este determinat de regulile limbii, al doilea - de experiența dezvoltatorului. În ceea ce privește matricele, dezvoltatorul poate încărca subtil sintaxa cu semantică. Nu este încă un obiect, dar nu mai este o matrice în sensul tradițional. PHP vă permite să creați matrice din variabile de diferite tipuri, inclusiv dvs. 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 lucruri care nici măcar nu erau prevăzute de regulile limbii. Folosind exemplul de matrice, acest lucru poate fi înțeles cel mai simplu.

Construcția matricei

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

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

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

Crearea unei matrice în timp ce se verifică o condiție:

$cSrcLine = "linie de date analizate";

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 fi indexate 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”; )

$aRezultat = 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 practică bună, pe de altă parte, îngreunează aplicarea. Chiar dacă autorul înțelege doctrina PHP-array-in-array, atunci nu trebuie abuzată: 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",

"opțiuni" => matrice("rută" => "/să salută", "prestabilite" => matrice(

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

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

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

Acesta este exemplul de practică PHP array-in-array a ZF 2. Nu foarte inspirat la început, dar funcționează și probabil face ca acest cadru să aibă succes (exemplu din modulul ZendSkeletonApplication/module/Helloworld/config/module.config.php).

O matrice este un construct de date important în timpul proiectării și dezvoltării. Varianta 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 ușor și mai clar așa, iar din punct de vedere al profesionalismului, când ceva începe să se înmulțească, înseamnă că ceva nu este în regulă în formularea 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 în procesarea constructelor 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 de a transforma semantica în sintaxă este adesea un lux inaccesibil. 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 o ambiguitate, scriptul pur și simplu se blochează. Nu toate depanatoarele se ocupă de circumstanțe 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 este mai probabil să găsească o eroare sau să nu o facă deloc.

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 diverse tipuri de date. Primul a supraviețuit și a dobândit o nouă sintaxă eficientă, cel din urmă a intrat în istorie.

Matrice simple și asociative

O intrare de matrice bidimensională este o altă pereche de paranteze „[” și „]”, de exemplu: $aSrcData se referă la un element al matricei inclus în matricea $aSrcData. În PHP nu există nicio cerință de a declara datele în avans. 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 este nevoie, și să-l distrugi atunci când nu mai este nevoie. Folosind nume semnificative ca chei (indexuri), puteți obține construcții lizibile care au sens î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"] = "Afanasiev";
$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";

În acest exemplu simplu, puteți vedea cum chestionarul creat poate fi aplicat tuturor angajaților. Puteți crea o matrice de angajați cu indici după numere de personal și, dacă este nevoie de un anumit angajat, selectați-l după numărul de personal.

Dacă organizația are subdiviziuni, sau există lucrători sezonieri, sau trebuie să separați pensionarii care lucrează, ... construcția „PHP-array-in-array” este foarte convenabilă, dar nu ar trebui să vă lăsați niciodată dus de dimensiune. Două sau trei dimensiuni reprezintă limita pentru o soluție eficientă.

Chei pentru lucrul cu matrice

Dacă înainte conta cum funcționează totul, atunci în ultimii ani ai erei binare, când programatorul dorea să știe exact cum erau stocate elementele matricei și dorea să aibă acces direct la ele, acestea au fost complet uitate. Au apărut multe codificări de caractere care ocupă mult 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 o problemă 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, numit adesea „cheie” pentru a accesa valoarea dorită.

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

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

$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 buclei:

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

o sa primeasca:

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

Cheia PHP a matricei la adăugarea elementelor „piersică” și „vinete” se formează secvențial de la 0, iar când specificați valoarea acesteia, aceasta 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 execuției buclei, matricea originală este scanată și se formează una nouă, în care elementele inutile pur și simplu nu sunt scrise.

O poți face mai ușor. Dacă se aplică ultimului exemplu:

unset($line); // elimină elementul din matricea 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 un tablou PHP într-un șir cu un delimitator și îl puteți analiza înapoi într-o altă matrice folosind un delimitator diferit.

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

E destul.

Căutare matrice

PHP are 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ă faceți propria căutare a matricei PHP.

Orice proiect este o matrice construită specifică, mai ales atunci când o parte din semantică este transferată în sintaxă și este reprezentată de un set de chei semnificative destul de specifice. Acest lucru vă permite să efectuați propriile funcții de căutare, care pot fi, de asemenea, etichetate în 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 urmare, matricea $functions va primi valorile matricei $elements, adică numele funcțiilor reale care lucrează cu elemente reale ale documentului.

Apelând funcția $functions pe $elements, puteți obține o căutare perfectă și un rezultat rapid.

Sortarea elementelor

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

Când folosim funcții PHP pentru sortare, nu trebuie să uităm că elementele pot avea nu numai un tip diferit, dar și un conținut nu chiar 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 propria soluție perfectă, cel puțin în faza de testare a scriptului, este sortarea manuală. Va ajuta la anticiparea situațiilor neprevăzute.

Matrice de șiruri

Datorită funcțiilor implode() și explode(), o matrice poate fi ușor transformată într-un șir și recuperată înapoi. Acest lucru vă permite să stocați datele într-o vizualizare 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 în 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 valori

Nu este recomandat să folosiți nimic legat de codificări naționale în constructele sintactice. Limba rusă, ca toate celelalte limbi ale căror caractere depășesc a-z, nu va crea probleme în zona de date, dar nu în sintaxa codului. Uneori, chiar și o simplă sarcină PHP „a ieși o matrice către o imprimantă sau un ecran” va duce la „fărâmițe” și, mai des, va opri pur și simplu scriptul.

PHP este un limbaj loial și este tolerant cu codificările naționale, dar există multe situații în care cantitatea de muncă depusă trebuie reluată doar pentru că o valoare cheie apare la locul potrivit și la momentul potrivit, care nu poate fi recunoscută.

Sintaxă PHP și mediu de limbaj

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

Regula „în cod există doar cod și există orice informație la intrare, în interior și la ieșire” va ajuta la evitarea surprizelor neprevăzute. Valoarea PHP din 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.

Una dintre operațiunile de bază atunci când lucrați cu matrice este găsirea unei anumite valori. Pentru asta este funcția PHP array_search(). Este capabil să gestioneze atât colecții unidimensionale, cât și asociative, returnând cheia valorii de căutare dacă se găsește în matrice.

Sintaxă

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

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

Parametrii de intrare:

  • $colecție - matrice de căutat;
  • 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.

Mecanism de lucru

Funcția PHP array_search() compară valoarea pe rând cu toate valorile din tabloul de colecție. În mod implicit, comparația se realizează fără a lua în considerare tipurile de operanzi. Această setare poate fi modificată prin setarea steagului strict la TRUE. Comparația șirurilor face distincție între majuscule și minuscule.

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

Dacă nu se găsește nicio potrivire, 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 se evaluează la FALSE, cum ar fi 0 sau un șir 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 original.

Exemplul 2 Funcția PHP array_search() poate procesa, de asemenea, o matrice unidimensională, considerând cheile acesteia drept următorii indici numerici în ordine.

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

Exemplul 3. Posibilă eroare în 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 căutată apare de trei ori în matrice, funcția va returna doar primul rezultat găsit - 0. Pentru a căuta mai multe potriviri, este recomandat să utilizați funcția PHP array_keys().