Cum se configurează smartphone-uri și PC-uri. Portal de informare
  • Acasă
  • Interesant
  • PHP caută o valoare într-o matrice. PHP: array_search - căutare rapidă în matrice

PHP caută o valoare într-o matrice. PHP: array_search - căutare rapidă în matrice

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 nu mai funcționează. 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().

din multidimensional (18)

Am modificat unul dintre exemplele de mai jos pentru a descrie funcția array_search. Funcția searchItemsByKey returnează toate valorile după $key dintr-o matrice multidimensională (N niveluri). Poate că asta ar fi de folos cuiva. Exemplu:

$arr = matrice("XXX"=>array("YYY"=> array("AAA"=> array("keyN" =>"valoare1")), "ZZZ"=> array("BBB"=> matrice ("keyN" => "valoare2")) //.....)); $rezultat = searchItemsByKey($arr,"keyN"); printeaza "

"; print_r($rezultat); print" 
"; // OUTPUT Array ( => valoare1 => valoare2)

Codul funcției:

Funcția searchItemsByKey($array, $key) ( $rezults = array(); if (is_array($array))) ( if (isset($array[$key]) && key($array)==$key) $results = $array[$key]; foreach ($array ca $sub_array) $results = array_merge($results, searchItemsByKey($sub_array, $key));

Am o matrice în care vreau să caut uid-ul și să obțin cheia matricei.

Exemple

Să presupunem că avem următoarea matrice bidimensională:

$userdb = array(array("uid" => "100", "name" => "Sandra Shush", "pic_square" => "urlof100"), array ("uid" => "5465", "name" => "Stefanie Mcmohn", "pic_square" => "urlof100"), array("uid" => "40489", "name" => "Michael", "pic_square" => "urlof40489"));

Apelarea search_by_uid(100) (uid-ul primului utilizator) ar trebui să returneze 0.

Apelul funcției search_by_uid(40489) ar trebui să returneze 2 .

Am încercat să creez bucle, dar am nevoie de un cod executabil mai rapid.

Pe baza răspunsului excelent al lui Jakub, iată o căutare mai generalizată care vă va permite să specificați cheia (nu doar pentru uid):

Funcția searcharray($value, $key, $array) ( foreach ($array ca $k => $val) ( dacă ($val[$key] == $valoare) ( ​​return $k; ) ) returnează null )

Utilizare: $rezultate = searcharray("searchvalue", searchkey, $array);

Funcția searchForId($id, $array) ( foreach ($array ca $key => $val) ( if ($val["uid"] === $id) ( return $key; ) ) return null; )

Va funcționa. Ar trebui să-l numești așa:

$id = searchForId("100", $userdb);

Este important să știți că dacă utilizați === tipurile de operatori comparate trebuie să fie exact aceleași, în acest exemplu trebuie să căutați șir sau doar să utilizați == în loc de === .

Pe baza răspunsului angora. În versiunile ulterioare de PHP (>= 5.5.0) puteți utiliza o singură linie.

$key = array_search("100", array_column($userdb, "uid"));

Chiar dacă aceasta este o întrebare veche și există un răspuns acceptat, m-am gândit că aș sugera o modificare a răspunsului acceptat. Deci, în primul rând, sunt de acord că răspunsul acceptat aici este corect.

Funcția searchArrayKeyVal($sKey, $id, $array) ( foreach ($array ca $key => $val) ( dacă ($val[$sKey] == $id) ( return $key; ) ) return false; )

În schimb, înlocuiți „uid” prestabilit cu un parametru în funcție, așa că acum apelarea codului de mai jos înseamnă că puteți utiliza o funcție pentru mai multe tipuri de matrice. Mică schimbare, dar este puțin diferită.

// Datele matrice ale utilizatorilor $userdb = matrice (matrice ("uid" => "100","nume" => "Sandra Shush","url" => "urlof100"), matrice ("uid" => " 5465","name" => "Stefanie Mcmohn","url" => "urlof100"), matrice ("uid" => "40489","name" => "Michael","url" => "urlof40489 "),); // Obține cheia matricei $arrayKey = searchArrayKeyVal("uid", "100", $userdb); if ($arrayKey!==false) ( echo "Rezultatul căutării: ", $userdb[$arrayKey]["nume"]; ) else ( echo "Rezultatul căutării nu poate fi găsit"; )

If(! function_exists("arraySearchMulti"))( function arraySearchMulti($search,$key,$array,$returnKey=false) ( foreach ($array ca $k => $val) ( if (isset($val[$) cheie])) ( dacă ((șir)$val[$cheie] == (șir)$căutare) ( return ($returnKey ? $k: $val); ) )else( return (is_array($val) ? arraySearchMulti ($căutare,$cheie,$val,$returnKey) : null ) ) return null ))

puteți folosi această funcție; https://github.com/serhatozles/ArrayAdvancedSearch

="2""; $Array = array("a" => array("d" => "2"), array("a" => "Exemplu lume","b" => "2"), array("c" => "3"), array("d" => "4"), $Result = ArraySearch($Array,$query,1);

"; print_r($Result); echo"
"; // Ieșire: // Array // (// => Array // (// [a] => Exemplu de lume // [b] => 2 //) // //)

Dacă întrebarea, adică

$a = [ [ "_id" => "5a96933414d48831a41901f2", "discount_amount" => 3,29, "discount_id" => "5a92656a14d488570c2c44a2", ], [ "_id" => "5a194a4a0d0f8d94d9d0f8d94d9d0df2d94a1d0d4d4d4d4d44a2d4d48831a41901f2", montare" => 4.53, " discount_id" => "5a9265b914d488548513b122", ], [ "_id" => "5a98083614d488191304b6c3", "discount_amount" => 15,24, "discount_id" => "5a98083614d488191304b6c3", "discount_amount" => 15.24, "discount_id" => "5a9280, 5a9280" > "5a9280" 5a982a4914d48824721eafe3", „discount_amount " => 45.74, "discount_id" => "5a928ce414d488609e73b443", ], [ "_id" => "5a982a4914d48824721eafe55", "discount_amount" => 10.26, "discount_id" => "514948" => "5a982a4914d48824721eafe55" ", ], ];

Funcția searchForId($id, $array) ( $did=0; $dia=0; foreach ($array ca $key => $val) ( if ($val["discount_id"] === $id) ( $ dia +=$val["discount_amount"]; $did++; ) if($dia != "") ( echo $dia; var_dump($did); ) return null); print_r(searchForId("5a928ce414d488609e73b443",$a));

Încearcă și asta

Funcția search_in_array($srchvalue, $array) ( dacă (is_array($array) && count($array) > 0) ( $foundkey = array_search($srchvalue, $array); if ($foundkey === FALSE) ( pentru fiecare ($array ca $cheie => $valoare) ( ​​dacă (este_matrice ($valoare) && număr ($valoare) > 0) ( $cheie găsită = căutare_în_matrice ($srchvalue, $valoare); dacă ($cheie găsită != FALSE ) return $foundkey ) ) else return $foundkey;

$a = ["x" => ["eee", "ccc"], "b" => ["zzz"]]; $found = nul; $cautare = "eee"; array_walk($a, function ($k, $v) use ($search, &$found) ( if (in_array($search, $k)) ( $found = $v; ) )); var_dump($găsit);

Iată o linie pentru același lucru,

$pic_square = $userb["pic_square"];

Iată exemplul meu și vă rog să rețineți că acesta este primul meu răspuns. Am scos matricea param pentru că aveam nevoie doar să caut o anumită matrice, dar ați putea adăuga cu ușurință una. În esență, am vrut să caut mai mult decât uid.

De asemenea, în situația mea, pot exista mai multe chei de returnat ca urmare a căutării prin alte câmpuri care pot să nu fie unice.

/** * @param array multidimensional * @param șir valoare de căutat, adică un nume de câmp specific, cum ar fi name_first * @param șir cheie asociativă în care să o găsiți, adică field_name * * @return chei de matrice.

*/ function search_revisions($dataArray, $search_value, $key_to_search) ( // Această funcție va căuta revizuirile pentru o anumită valoare // legată de cheia asociativă pe care o căutați. $keys = array(); foreach ($dataArray ca $key => $cur_value) ( ​​​​dacă ($cur_value[$key_to_search] == $search_value) ( ​​​​$keys = $key; ) ) returnează $keys;

Mai târziu am ajuns să scriu asta pentru a-mi permite să caut o altă valoare și cheie asociativă. Deci primul meu exemplu vă permite să căutați o valoare în orice cheie asociativă specifică și să returnați toate potrivirile. Acest al doilea exemplu arată unde se găsește valoarea ("Taylor") într-o anumită cheie de asociere (first_name).ŞI

o altă valoare (adevărată) se găsește într-o altă cheie asociativă (utilizată) și returnează toate potrivirile (Cheile în care sunt folosite persoanele numite „Taylor” ȘI).

/** * @param array multidimensional * @param șir $search_value Valoarea de căutat, adică un anumit „Taylor” * @param șir $key_to_search Cheia asociativă în care să o găsiți, adică prenumele * @param șir $other_matching_key Cheia asociativă cheie de găsit în potrivirile pentru angajat * @param șir $other_matching_value Valoarea de găsit în acea cheie asociativă care se potrivește, adică true * * @return chei de matrice, adică toate persoanele cu prenumele "Taylor" care sunt angajate.

$date = array(array("cust_group" => 6, "price" => 13.21, "price_qty" => 5), array("cust_group" => 8, "price" => 15.25, "price_qty" => 4), array("cust_group" => 8, "price" => 12,75, "price_qty" => 10)); $findKey = search_revisions($date,"8", "cust_group", "10", "price_qty"); print_r($findKey);

Rezultat

Matrice ( => 2)

/** * caută o matrice simplă și multidimensională * @param tip $needle * @param tip $haystack * @return boolean */ funcție publică statică in_array_multi($needle, $haystack)( $needle = trim($needle) ); if(!is_array($haystack)) return False($haystack as $key=>$value)( if(is_array($value))( if(self::in_array_multi($needle, $value)) return True; else self::in_array_multi($needle, $value) else if(trim($value) === trim($needle))(//vizibility fix// error_log("$value === $ vizibilitate ac setarea la 1 ascuns"); returnează Adevărat; ) ) returnează Fals; )

Dacă utilizați (PHP 5>=5.5.0) nu trebuie să vă scrieți propria funcție pentru aceasta, doar scrieți această linie și veți termina.

Dacă vrei un singur rezultat:

$key = array_search(40489, array_column($userb, "uid"));

Pentru rezultate multiple

$keys = array_keys(array_column($userdb, "uid"), 40489);

Dacă aveți o matrice asociativă așa cum este menționat în comentarii, puteți face acest lucru cu:

$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, "uid")),40489);

Dacă utilizați PHP<5.5.0, вы можете использовать этот backport , спасибо ramsey!

Actualizare. Fac câteva teste simple și formularul cu rezultate multiple pare a fi cel mai rapid, chiar mai rapid decât funcția personalizată a lui Jakub!

În versiunile ulterioare de PHP (>=5.5.0) puteți folosi această linie:

$key = array_search("100", array_column($userdb, "uid"));

Expandând funcția creată de @mayhem, acest exemplu ar fi mai degrabă o căutare „fuzzy” dacă doriți doar să potriviți o parte din ( mare parte) șiruri de căutare:

Funcția searchArrayKeyVal($sKey, $id, $array) ( foreach ($array ca $key => $val) ( if (strpos(strtolower($val[$sKey]), strtolower(trim($id)))) ! == fals) ( return $key; ) ) return false )

De exemplu, valoarea din matrice este Welcome to New York! și ai nevoie doar de prima copie a "New York!"

A trebuit să folosesc funcția un, care găsește toate elementele din matrice. Așa că am modificat funcția realizată de Jakub Truneček după cum urmează:

Funcția search_in_array_r($needle, $array) ( $found = array(); foreach ($array ca $key => $val) ( if ($val == $needle) ( array_push($found, $val); ) ) if (count($found) != 0) return $found; altfel returnează null;

$search1 = "demo"; $search2 = "bob"; $arr = array("0" => "salut","1" => "test","2" => "john","3" => array("0" => "martin", "1 " => "bob"),"4" => "demo"); foreach ($arr ca $valoare) ( ​​dacă (este_matrice($valoare)) ( if (în_array($căutare2, $valoare)) ( echo "cu succes"; //execuți codul dvs.) ) else ( dacă ($valoare) == $căutare1) ( ecou „succes”; ) ) )

Dacă este posibil, introduceți tipurile de parametri. Dar funcționează doar cu tipuri simple precum int, bool și float.

$unsafe_variable = $_POST["user_id"]; $variabilă_sigură = (int)$variabilă_nesigură ; mysqli_query($conn, "INSERT INTO table (coloana) VALUES ("" . $safe_variable . "")");

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ă abilitatea 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 unei matrice î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 declarare a datelor î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
Manager";

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ă o organizație are divizii, sau are lucrători sezonieri sau trebuie să identifice 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 dimensionalitate. 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 paginii și codul):

$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 PHP a matricei 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);

Este suficient.

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 funcția $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 Caseta 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.

Căutarea unei valori într-o matrice este necesară în aproape fiecare aplicație PHP și script care lucrează cu date, pentru care există multe metode și funcții speciale. În funcție de sarcină și tipul de căutare, ar trebui să utilizați anumite instrumente, ținând cont de caracteristicile acestora, de viteza de execuție și de ușurința în utilizare. În continuare, ne vom familiariza cu funcțiile PHP pentru căutarea elementelor dintr-o matrice, posibile construcții și metode și, de asemenea, vom afla care metodă este cea mai rapidă.

Funcții de căutare într-o matrice:
array_search- folosit pentru a căuta o valoare într-o matrice. Dacă are succes, returnează cheia valorii căutate dacă nu se găsește nimic, returnează FALSE. Înainte de PHP 4.2.0, array_search() returna NULL mai degrabă decât FALSE la eșec.

Sintaxa funcției mixed array_search (mixed needle, array fanstack [, bool strict]).

foreach (array_expression ca $valoare)
declaraţie
foreach (array_expression as $key => $value)
declaraţie

Un exemplu de utilizare a unei funcții cu constructul foreach pentru a căuta un element de matrice, returnând TRUE la succes

Sintaxa construcției
în timp ce (expr)
declaraţie

Returnează cheia unui element de matrice la succes

Din tabelul de măsurători se poate observa că funcția array_search, arată cele mai bune rezultate atât atunci când căutați în matrice mici, cât și în matrice mari. În același timp, timpul de căutare folosind bucle crește semnificativ în funcție de dimensiunea matricei.

Cele mai bune articole pe această temă