Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Zanimljiv
  • Php traži vrijednost u nizu. PHP: array_search - brzo pretraživanje niza

Php traži vrijednost u nizu. PHP: array_search - brzo pretraživanje niza

Jedna od glavnih operacija pri radu s nizovima je traženje određene vrijednosti. Za to je dizajnirana funkcija PHP array_search(). Sposoban je obraditi i jednodimenzionalne i asocijativne zbirke, vraćajući ključ tražene vrijednosti ako se pronađe u nizu.

Sintaksa

Formalizirani opis funkcije array_search() u PHP-u je sljedeći:

Mixed array_search (mješovita vrijednost, polje $collection [, bool strict])

Ulazni parametri:

  • $collection - niz u kojem će se vršiti pretraga;
  • vrijednost - željena vrijednost bilo koje vrste;
  • strict je izborna booleova zastavica koja postavlja strogi mehanizam usporedbe s obzirom na tip.

Mehanizam rada

Funkcija PHP array_search() uspoređuje vrijednost jednu po jednu sa svim vrijednostima u nizu zbirke. Prema zadanim postavkama, usporedba se izvodi bez obzira na tipove operanda. Ova se postavka može promijeniti postavljanjem stroge oznake na TRUE. Usporedbe nizova razlikuju velika i mala slova.

Ako se pronađe podudaranje, vraća se ključ koji odgovara pronađenom elementu i funkcija se prestaje izvoditi. Stoga se ne može koristiti za otkrivanje višestrukih pojavljivanja željene vrijednosti u nizu.

Ako se ne pronađe podudaranje, funkcija će vratiti Booleovu vrijednost FALSE.

Trebali biste provjeriti vraćeni rezultat koristeći striktni operator jednakosti (===). Ovo je važno jer funkcija može vratiti vrijednost koja je pretvorena u FALSE, kao što je 0 ili prazan niz.

Primjeri upotrebe

Primjer 1. Prilikom prosljeđivanja višedimenzionalnog polja funkciji PHP array_search(), rezultat rada bit će ključ traženog elementa.

"zima", "sezona2" => "proljeće", "sezona3" => "ljeto", "sezona4" => "jesen"); $result1 = array_search("zima", $array); $result2 = array_search("ljeto", $array); $result3 = array_search("travanj", $array); ?>

U ovom primjeru $result1 bit će postavljen na "season1", $result2 bit će postavljen na "season3", a $result3 bit će postavljen na Booleovu vrijednost FALSE jer se niz "april" ne pojavljuje u izvornom nizu.

Primjer 2. Funkcija PHP array_search() također može obraditi jednodimenzionalni niz, smatrajući njegove ključeve sljedećim numeričkim indeksima.

Varijabla $result bit će postavljena na 1, prema indeksu elementa "hunter" u nizu $.

Primjer 3. Moguća pogreška pri analizi rezultata.

"Washington", 1 => "Adams", 2 => "Jefferson", 3 => "Madison", 4 => "Monroe"); $rezultat = array_search("Washington", $predsjednici); if (!$result) ( echo "G. Washington nije bio prvi predsjednik SAD-a"; ) ?>

Dakle, bez provjere rezultata uz strogu jednakost, možete dobiti neočekivanu poruku da George Washington nije bio prvi predsjednik Sjedinjenih Država.

Primjer 4: Vraća se samo ključ prvog pronađenog podudaranja.

Iako se vrijednost koju tražite pojavljuje tri puta u nizu, funkcija će vratiti samo prvi pronađeni rezultat - 0. Za pronalaženje više podudaranja preporučuje se korištenje funkcije PHP array_keys().

iz višedimenzionalnog (18)

Izmijenio sam jedan od donjih primjera kako bih opisao funkciju array_search. Funkcija searchItemsByKey vraća sve vrijednosti prema $key iz višedimenzionalnog niza (N razina). Možda bi ovo nekome bilo korisno. Primjer:

$arr = array("XXX"=>array("YYY"=> array("AAA"=> array("keyN" =>"value1")), "ZZZ"=> array("BBB"=> array ("ključN" => "vrijednost2")) //.....)); $rezultat = searchItemsByKey($arr,"keyN"); ispis"

"; print_r($result); print " 
"; // IZLAZNI niz ( => vrijednost1 => vrijednost2)

Kôd funkcije:

Funkcija searchItemsByKey($array, $key) ( $results = array(); if (is_array($array)) ( if (isset($array[$key]) && key($array)==$key) $results = $array[$key]; foreach ($array as $sub_array) $results = array_merge($results, searchItemsByKey($sub_array, $key));

Imam niz u kojem želim potražiti uid i dobiti ključ niza.

Primjeri

Pretpostavimo da imamo sljedeći dvodimenzionalni niz:

$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"));

Pozivanje search_by_uid(100) (uid prvog korisnika) trebalo bi vratiti 0.

Poziv funkcije search_by_uid(40489) trebao bi vratiti 2.

Pokušao sam stvoriti petlje, ali trebam brži izvršni kod.

Nadovezujući se na Jakubov izvrstan odgovor, evo općenitijeg pretraživanja koje će vam omogućiti da navedete ključ (ne samo za uid):

Funkcija searcharray($value, $key, $array) ( foreach ($array as $k => $val) ( if ($val[$key] == $value) ( ​​​​return $k; ) ) return null ;)

Upotreba: $results = searcharray("searchvalue", searchkey, $array);

Funkcija searchForId($id, $array) ( foreach ($array as $key => $val) ( if ($val["uid"] === $id) ( return $key; ) ) return null; )

Upalit će. Trebao bi to nazvati ovako:

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

Važno je znati da ako koristite === tipovi operatora koji se uspoređuju moraju biti potpuno isti, u ovom primjeru trebate potražiti niz ili jednostavno koristiti == umjesto === .

Na temelju odgovora angora. U kasnijim verzijama PHP-a (>= 5.5.0) možete koristiti jednolinijski.

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

Iako je ovo staro pitanje i postoji prihvaćeni odgovor, mislio sam predložiti jednu promjenu prihvaćenog odgovora. Dakle, prije svega, slažem se da je prihvaćeni odgovor ovdje točan.

Funkcija searchArrayKeyVal($sKey, $id, $array) ( foreach ($array as $key => $val) ( if ($val[$sKey] == $id) ( return $key; ) ) return false; )

Umjesto toga, unaprijed postavljeni "uid" zamijenite parametrom u funkciji, tako da sada pozivanje koda u nastavku znači da možete koristiti jednu funkciju za više vrsta nizova. Mala promjena, ali malo je drugačije.

// Podaci o nizu korisnika $userdb = niz (niz ("uid" => "100","name" => "Sandra Šuš","url" => "urlof100"), niz ("uid" => " 5465","name" => "Stefanie Mcmohn","url" => "urlof100"), niz ("uid" => "40489","name" => "Michael","url" => "urlof40489 "),); // Dobivanje ključa niza $arrayKey = searchArrayKeyVal("uid", "100", $userdb); if ($arrayKey!==false) ( echo "Rezultat pretraživanja: ", $userdb[$arrayKey]["name"]; ) else ( echo "Rezultat pretraživanja nije moguće pronaći"; )

If(! function_exists("arraySearchMulti"))( function arraySearchMulti($search,$key,$array,$returnKey=false) ( foreach ($array as $k => $val) ( if (isset($val[$) ključ])) ( if ((string)$val[$key] == (string)$search) ( return ($returnKey ? $k: $val); ) )else( return (is_array($val) ? arraySearchMulti ($search,$key,$val,$returnKey) : null);

možete koristiti ovu funkciju; https://github.com/serhatozles/ArrayAdvancedSearch

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

"; print_r($Result); echo "
"; // Izlaz: // Niz // (// => Niz // (// [a] => Primjer svijeta // [b] => 2 //) // //)

Ako pitanje, tj.

$a = [ [ "_id" => "5a96933414d48831a41901f2", "discount_amount" => 3.29, "discount_id" => "5a92656a14d488570c2c44a2", ], [ "_id" => "5a9790fd14d48879cf16a9e8", " dis count_amount" => 4.53, "discount_id" => "5a9265b914d488548513b122", ], [ "_id" => "5a98083614d488191304b6c3", "discount_amount" => 15.24, "discount_id" => "5a92806a14d48858ff5c2ec3", ], [ " _id" > "5a982a4914d48824721eafe3", "iznos_popusta " => 45.74, "discount_id" => "5a928ce414d488609e73b443", ], [ "_id" => "5a982a4914d48824721eafe55", "discount_amount" => 10.26, "discount_id" => "5a928ce414d488609e73 b4 43", ], ];

Funkcija searchForId($id, $array) ( $did=0; $dia=0; foreach ($array as $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));

Pokušajte i ovo

Funkcija search_in_array($srchvalue, $array) ( if (is_array($array) && count($array) > 0) ( $foundkey = array_search($srchvalue, $array); if ($foundkey === FALSE) ( foreach ($array as $key => $value) ( ​​​​if (is_array($value) && count($value) > 0) ( $foundkey = search_in_array($srchvalue, $value); if ($foundkey != FALSE) ) return $foundkey ) ) else return $foundkey;

$a = ["x" => ["eee", "ccc"], "b" => ["zzz"]]; $pronađeno = nula; $pretraživanje = "eee"; array_walk($a, funkcija ($k, $v) koristi ($search, &$found) ( if (in_array($search, $k)) ( $found = $v; ) )); var_dump($pronađeno);

Evo jedne linije za istu stvar,

$pic_square = $userdb["pic_square"];

Evo mog primjera i imajte na umu da je ovo moj prvi odgovor. Izvadio sam niz parametara jer sam trebao tražiti samo jedan određeni niz, ali možete lako dodati jedan. Htio sam u biti tražiti više od samog uid-a.

Također, u mojoj situaciji može postojati više ključeva za vraćanje kao rezultat pretraživanja po drugim poljima koja možda nisu jedinstvena.

/** * @param polje višedimenzionalno * @param vrijednost niza za traženje, tj. određeni naziv polja kao name_first * @param string asocijativni ključ u kojem se nalazi, tj. field_name * * @return ključevi polja.

*/ funkcija search_revisions($dataArray, $search_value, $key_to_search) ( // Ova funkcija će pretraživati ​​revizije za određenu vrijednost // povezanu s asocijativnim ključem koji tražite. $keys = array(); foreach ($dataArray kao $key => $cur_value) ( ​​​​if ($cur_value[$key_to_search] == $search_value) ( ​​​​$keys = $key; ) ) vrati $keys;

Kasnije sam ovo napisao kako bih mogao potražiti drugu vrijednost i asocijativni ključ. Dakle, moj prvi primjer vam omogućuje da potražite vrijednost u bilo kojem specifičnom asocijativnom ključu i vratite sva podudaranja. Ovaj drugi primjer pokazuje gdje se vrijednost ("Taylor") nalazi u određenom ključu pridruživanja (first_name). I

druga vrijednost (true) nalazi se u drugom asocijativnom ključu (korištenom) i vraća sve podudarnosti (Ključevi u kojima se koriste osobe s imenom "Taylor" I).

/** * @param polje višedimenzionalno * @param string $search_value Vrijednost za traženje, tj. određeni "Taylor" * @param string $key_to_search Asocijativni ključ u kojem se to nalazi, tj. first_name * @param string $other_matching_key Asocijativni ključ za pronalaženje u podudarnostima za zaposlene * @param string $other_matching_value Vrijednost za pronalaženje u tom odgovarajućem asocijativnom ključu, tj. true * * @return ključeve polja, tj. sve ljude s imenom "Taylor" koji su zaposleni.

$data = 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($data,"8", "cust_group", "10", "price_qty"); print_r($findKey);

Proizlaziti

Niz ( => 2)

/** * pretražuje jednostavan kao i višedimenzionalni niz * @param tip $needle * @param tip $haystack * @return boolean */ javna statička funkcija in_array_multi($needle, $haystack)( $needle = trim($needle ); if(!is_array($haystack)) return False; foreach($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))(//visibility fix// error_log("$value === $ needle visibility) postavka na 1 skriveno"); vrati True; ) ) vrati False; )

Ako koristite (PHP 5>=5.5.0) ne trebate pisati vlastitu funkciju za ovo, samo napišite ovaj redak i gotovi ste.

Ako želite samo jedan rezultat:

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

Za višestruke rezultate

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

Ako imate asocijativni niz kao što je navedeno u komentarima, to možete učiniti pomoću:

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

Ako koristite PHP<5.5.0, вы можете использовать этот backport , спасибо ramsey!

Ažurirati. Radim neke jednostavne testove i čini se da je obrazac s više rezultata najbrži, čak brži od Jakubove prilagođene funkcije!

U kasnijim verzijama PHP-a (>=5.5.0) možete koristiti ovaj jednolinijski tekst:

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

Proširujući funkciju koju je stvorio @mayhem, ovaj bi primjer bio više "nejasno" pretraživanje ako samo želite pronaći podudaranje dijela ( velika dio) nizovi za pretraživanje:

Funkcija searchArrayKeyVal($sKey, $id, $array) ( foreach ($array as $key => $val) ( if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) ! == false) ( return $key; ) ) return false )

Na primjer, vrijednost u nizu je Dobrodošli u New York! i trebate samo prvi primjerak "New York!"

Morao sam upotrijebiti funkciju un koja pronalazi sve elemente u nizu. Stoga sam modificirao funkciju koju je obavljao Jakub Truneček na sljedeći način:

Funkcija search_in_array_r($needle, $array) ( $found = array(); foreach ($array as $key => $val) ( if ($val == $needle) ( array_push($found, $val); ) ) if (count($found) != 0) return $found else return null;

$search1 = "demo"; $pretraži2 = "bob"; $arr = array("0" => "hello","1" => "test","2" => "john","3" => array("0" => "martin", "1) " => "bob"),"4" => "demo"); foreach ($arr as $value) ( ​​​​if (is_array($value)) ( if (in_array($search2, $value)) ( echo "uspješno"; //izvrši svoj kod) ) else ( if ($value) == $search1) (echo "uspjeh"; ) ) )

Ako je moguće, unesite vrste parametara. Ali radi samo s jednostavnim tipovima kao što su int, bool i float.

$unsafe_variable = $_POST["user_id"]; $sigurna_varijabla = (int)$nesigurna_varijabla ; mysqli_query($conn, "UMETNI U tablicu (stupac) VRIJEDNOSTI ("" . $safe_varijabla . "")");

Programiranje se odnosi na sintaksu i semantiku. Prvo je određeno pravilima jezika, drugo iskustvom programera. S obzirom na nizove, programer može posebno učitati sintaksu sa semantikom. Ovo još nije objekt, ali više nije niz u tradicionalnom smislu. PHP vam daje mogućnost stvaranja nizova varijabli različitih vrsta, uključujući njih same. Element niza može biti funkcija, odnosno mogućnost učitavanja niza stvarnim algoritmom, pravim značenjem.

Sintaksa je stabilna, ali se mijenja od verzije do verzije i možda neće uvijek biti kompatibilna čak ni odozdo prema vrhu. Prenosivost programa je dobro zaboravljeno dostignuće prošlog stoljeća. Semantika se razvija i uvijek se može primijeniti ne samo u bilo kojoj verziji bilo kojeg jezika; Postala je tradicija koristiti sintaktičke konstrukcije za izražavanje onoga što nije ni predviđeno pravilima jezika. To se najlakše može razumjeti na primjeru nizova.

Konstruiranje nizova

Array u PHP-u ima prikladnu sintaksu i funkcionalnost. To se može unaprijed opisati, ali često je zgodno kreirati nizove u hodu prema potrebi.

public $aNone = array(); // niz je opisan i ne sadrži ništa

public $aFact = array("avokado", "breskva", "trešnja"); // ovaj niz ima tri elementa

Stvaranje niza tijekom provjere uvjeta:

$cSrcLine = "linija analiziranih podataka";

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

if (checkFunc($cSrcLine, $cUserLine) (

$aResult = "Da"; // dodaj u PHP polje

$aResult = "Ne";

Kao rezultat izvođenja ovog primjera, stvorit će se niz od 13 elemenata, čije će vrijednosti biti samo nizovi "Da" ili "Ne". Elementi će dobiti indekse od 0 do 12. Isti učinak može se postići tako da prvo upišete “buduće” PHP polje u niz:

$cFutureArray = "";

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

$cKorisničkaLinija = inputKorisničkaLinija(); // unijeti nešto

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

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

) else ( $cFutureArray .= "Ne"; )

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

Višedimenzionalni nizovi

Mnogi sustavi za upravljanje sadržajem (CMS) u velikoj mjeri koriste polja. S jedne strane, to je dobra praksa, s druge strane, otežava korištenje. Čak i ako autor razumije doktrinu "PHP niz unutar niza", ne bi ga trebao zlorabiti: ne samo da će se programer morati naviknuti na složenu notaciju. Često će se sam kreator nakon nekog vremena dugo sjećati što je isprva napisao:

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

"router" => array("routes" => array("sayhello" => 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"))

Ovo je primjer prakse "PHP niz unutar niza" iz ZF 2. Isprva nije baš inspirativan, ali radi i nedvojbeno čini ovaj okvir uspješnim (primjer iz ZendSkeletonApplication/module/Helloworld/config/module.config.php) .

Niz je važna podatkovna konstrukcija tijekom projektiranja i razvoja. Njegova višedimenzionalna inačica nekoć je bila popularna, no s vremenom je ostala potreba za nizovima od najviše dvije ili tri dimenzije. Ovako je jednostavnije i jasnije, a sa stručne strane, kad se nešto počne množiti, to znači da nešto nije u redu u iskazu problema ili kodu.

Jednostavno, dostupno i razumljivo

Kada stvarate niz unutar niza u PHP-u, najbolje je ograničiti se na dvije ili tri razine. Unatoč stabilnosti i pouzdanosti PHP-a, on čini pogreške prilikom obrade sintaktičkih struktura. Možete to podnijeti ako imate dobar uređivač koda i naviknete se na precizno brojanje zagrada i zareza. Međutim, PHP ne kontrolira tipove podataka (to je karma modernog programiranja) i omogućuje programerima da vježbaju semantičke pogreške.

Pravilo za kontrolu tipova varijabli ili vlastitih ideja za pretvaranje semantike u sintaksu često je nedopustiv luksuz. Ovo je gubitak brzine skripte, čitljivosti koda, ... jer je jednostavnost kodiranja uvijek bitna.

PHP ima značajnu negativnu osobinu: kada se pojavi neizvjesnost, skripta se jednostavno zamrzne. Ne mogu se svi programi za ispravljanje pogrešaka nositi s nepredviđenim okolnostima, a puno ovisi o iskustvu i intuiciji programera. Što je algoritam jednostavniji, što su informacije dostupnije strukturirane, to su veće šanse za pronalaženje pogreške ili njezino potpuno sprječavanje.

Karakteristično je da su, kada su se pojavili prvi nizovi, predložene varijante podataka u obliku struktura - nespretan pokušaj da se nešto stvori od različitih tipova podataka. Prvi je preživio i dobio novu učinkovitu sintaksu, dok je drugi postao povijest.

Jednostavni i asocijativni nizovi

Oznaka za dvodimenzionalni niz je još jedan par zagrada "[" i "]", na primjer: $aSrcData znači pristup elementu niza koji je uključen u niz $aSrcData. U PHP-u nema zahtjeva za deklariranjem podataka unaprijed. Za sve navedene informacije uvijek se može provjeriti postojanje.

Vrlo je učinkovito nešto stvoriti samo onda kada je potrebno, u onom obliku u kojem se tražilo, a uništiti kada za tim nestane potrebe. Koristeći smislena imena kao ključeve (indekse), možete dobiti čitljive konstrukcije koje imaju smisla u kontekstu trenutnog mjesta u algoritmu:

$aAnketa["name"] = "Ivanov";
$aAnketa["age"] = 42;
$aAnketa["work"] = "Direktor";
$aAnketa["active"] = točno;
$aTablica = $aAnketa;

$aAnketa["name"] = "Petrov";
$aAnketa["age"] = 34;
$aAnketa["work"] = "Upravitelj";
$aAnketa["active"] = točno;
$aTablica = $aAnketa;

$aAnketa["name"] = "Afanasjev";
$aAnketa["age"] = 28;
$aAnketa["work"] = "Radnik";
$aAnketa["active"] = netočno;
$aTablica = $aAnketa;

$sOne .= implode ("; ", $aTable) . "
"; // drugo PHP polje u niz
$sOne .= $aTable["work"]; // pristup jednom elementu drugog niza

Rezultat ovog primjera (prvi niz je normalan, ključevi u njemu počinju od 0, drugi niz je asocijativan, ima četiri ključa: "ime", "dob", "posao", "aktivan"):

$sOne = "Petrov; 34; Menadžer; 1
Menadžer";

Ovaj jednostavan primjer pokazuje kako se izrađeni upitnik može primijeniti na sve zaposlenike. Možete kreirati niz djelatnika s indeksima po personalnim brojevima i, ako trebate određenog djelatnika, odabrati ga po personalnim brojevima.

Ako organizacija ima odjele, ili postoje sezonski radnici, ili trebate zasebno identificirati zaposlene umirovljenike, ... dizajn "PHP niz u nizu" je vrlo zgodan, ali nikada se ne biste trebali zanositi dimenzijom. Dvije ili tri dimenzije su granica za učinkovito rješenje.

Tipke za rad s nizovima

Ako je prije bilo važno kako je sve raspoređeno, onda su posljednjih godina potpuno zaboravljene tradicije binarne ere, kada je programer želio znati kako su točno elementi niza pohranjeni i želio im imati izravan pristup. Pojavila su se mnoga kodiranja znakova koja zauzimaju više od jednog bajta u memoriji. Riječ "bit" sada se može pronaći samo u operacijama pretraživanja bitova, ali pretraživanje PHP polja je posebna tema. Pristup elementima može biti jednostavan i asocijativan. U prvom slučaju, elementi niza (koji imaju bilo koji od tipova dostupnih u PHP-u) označeni su brojevima 0, 1, 2, ... U drugom slučaju, programer specificira vlastiti indeks, koji se često naziva "ključ", za pristup željenoj vrijednosti.

$aLine["fruit"] = "naranča"; // ovdje ključ PHP polja = "voće"

ili (tako da je sve ispravno, poštujući kodiranje i kod stranice):

$aLine = iconv("UTF-8", "CP1251", "narančasto");

Prilikom dodavanja nove vrijednosti nizu $aLine:

$aLine = iconv("UTF-8", "CP1251", "breskva");
$aLine = iconv("UTF-8", "CP1251", "krastavac");
$aLine = iconv("UTF-8", "CP1251", "patlidžan");

kao rezultat izvođenja petlje:

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

primit će se:

voće=naranča
0=breskva
povrće=krastavac
1=patlidžan

PHP ključ niza kada se dodaju elementi "breskva" i "patlidžan" formira se sekvencijalno od 0, a kada se navede njegova vrijednost bit će jednak ovoj vrijednosti.

Uklanjanje elemenata iz niza

Najlakši način je tijekom njegove obrade. U ovom slučaju, na primjer, kao rezultat izvođenja petlje, originalni niz se skenira i formira se novi, u koji se jednostavno ne upisuju nepotrebni elementi.

Moglo bi biti lakše. Ako se primijenimo na posljednji primjer:

poništi($aLine); // uklanjanje elementa niza PHP

tada će rezultat biti:

voće=naranča
povrće=krastavac
1=patlidžan

Postoji mnogo opcija za manipuliranje elementima niza. Na primjer, korištenjem funkcija: implode() i explode(), možete napisati PHP niz u niz s jednim graničnikom i raščlaniti ga natrag u drugi niz pomoću drugog graničnika.

Za jednostavno brisanje cijelog niza u PHP-u, samo napišite: unset($aLine);

To je dosta.

Traži u nizu

PHP sadrži posebne funkcije pretraživanja i in_array(), ali prije nego što ih odlučite koristiti, trebali biste razmisliti o tome da sami pretražujete PHP polje.

Svaki projekt ima specifične konstruirane nizove, osobito kada je dio semantike prenesen u sintaksu i predstavljen je skupom vrlo specifičnih smislenih ključeva. To vam omogućuje izvođenje vlastitih funkcija pretraživanja, koje se također mogu označiti na smislen način.

U PHP-u možete pozivati ​​funkcije čiji se naziv određuje tijekom izvođenja programa. Vrlo praktičan primjer iz PHPWord biblioteke, koji vam omogućuje čitanje i izradu MS Word dokumenata:

$elements = array("Tekst", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Tablica", "Slika", "Objekt", "Fusnota",
"Endnote", "CheckBox", "TextBox", "Field", "Line");

$funkcije = polje();

za ($i = 0; $i< count($elements); $i++) {
$functions[$i] = "dodaj" . $elementi[$i];
}

Kao rezultat toga, polje $functions će primiti vrijednosti polja $elements, odnosno imena stvarnih funkcija koje rade sa stvarnim elementima dokumenta.

Pozivanjem $functions na $elements, možete dobiti savršeno pretraživanje i brze rezultate.

Razvrstavanje predmeta

Zadatak sortiranja podataka je važan i PHP nudi nekoliko funkcija za to: sort(), rsort(), asort(), ksort(), ... Uzlazni i silazni elementi, druge dvije funkcije pohranjuju odnose između ključeva i vrijednosti . Ponekad ima smisla nasumično miješati vrijednosti niza - shuffle().

Kada koristite PHP funkcije za sortiranje, ne smijete zaboraviti da elementi mogu imati ne samo različite vrste, već i ne sasvim prirodan sadržaj. Prije svega, morate biti vrlo oprezni pri sortiranju nizova koji sadrže ruska slova, sortiranju datuma, kao i brojeva koji su napisani u različitim formatima.

Najbolji način da sami napišete idealno rješenje, barem u fazi testiranja skripte, je ručno sortiranje. Pomoći će predvidjeti nepredviđene situacije.

Nizovi nizova

Zahvaljujući funkcijama implode() i explode(), niz se lako može transformirati u niz i vratiti natrag. To vam omogućuje pohranjivanje podataka u kompaktnom prikazu i njihovo proširenje u prikladno stanje prema potrebi.

Niz pretvoren u niz otvara nove mogućnosti. Na primjer, zadatak traženja ključnih riječi u tekstu zahtijeva da se ono što je pronađeno ne dodaje ponovno.

$cSrcLine = "Text Text ListItemRun TextBox ListItem TextBox Potvrdni okvir Potvrdni okvir TextBox Fusnota";

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

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

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

Kao rezultat toga, varijabla $cOne će primiti samo one vrijednosti iz izvornog niza koje se tamo pojavljuju jednom: "Tekst; ListItemRun; TextBox; ListItem; Provjerite; Okvir; CheckBox; Fusnota".

Ruski jezik u ključevima i značenjima

U sintaktičkim strukturama nije preporučljivo koristiti ništa što je povezano s nacionalnim kodiranjem. Ruski, kao i svi drugi jezici čiji se znakovi protežu dalje od a-z, neće stvarati probleme jer je u području podataka, ali ne i u sintaksi koda. Ponekad će čak i jednostavan zadatak u PHP-u "ispisati niz na pisač ili na ekran" dovesti do "ludih grešaka", a češće će skripta jednostavno stati.

PHP je lojalan jezik i tolerantan je prema nacionalnim kodovima, no postoje mnoge situacije kada se dovršena količina posla mora ponovno obaviti samo zato što ključna vrijednost iskoči na pravom mjestu iu pravo vrijeme, što nije moguće prepoznati.

PHP sintaksa i jezično okruženje

Treba imati na umu da je PHP sintaksa jedna stvar, ali konstrukti ove sintakse "surađuju" s drugim aplikacijama, s operativnim sustavom, s hardverskim opcijama. Postoji mnogo opcija, nikad nije moguće sve osigurati.

Pravilo "postoji samo kod u kodu, ali postoje sve vrste informacija na ulazu, unutra i izlazu" pomoći će u izbjegavanju nepredviđenih iznenađenja. PHP vrijednost u nizu može biti "ruska", ali njen ključ mora biti sintaktički točan ne samo sa stajališta određenog jezika, već i sa stajališta njegovog radnog okruženja.

Traženje vrijednosti u nizu potrebno je u gotovo svakoj PHP aplikaciji i skripti koja radi s podacima, za što postoje mnoge metode i posebne funkcije. Ovisno o zadatku i vrsti pretraživanja, trebali biste koristiti određene alate, uzimajući u obzir njihove značajke, brzinu izvođenja i jednostavnost korištenja. U nastavku ćemo se upoznati s PHP funkcijama za pretraživanje elemenata u nizu, mogućim konstrukcijama i metodama te saznati koja je metoda najbrža.

Funkcije za pretraživanje u nizu:
pretraživanje_niza- koristi se za traženje vrijednosti u nizu. Ako je uspješna, vraća ključ tražene vrijednosti; ako ništa nije pronađeno, vraća FALSE. Prije PHP-a 4.2.0, array_search() vraćao je NULL umjesto FALSE u slučaju greške.

Sintaksa funkcije mixed array_search (mješovita igla, array haystack [, bool strict]).

foreach (array_expression kao $vrijednost)
izjava
foreach (array_expression kao $key => $value)
izjava

Primjer upotrebe funkcije s konstrukcijom foreach za traženje elementa niza, uz vraćanje TRUE u slučaju uspjeha

Sintaksa konstrukcije
dok (izraz)
izjava

Vraća ključ elementa niza u slučaju uspjeha

Iz tablice mjerenja vidljivo je da funkcija pretraživanje_niza, pokazuje najbolje rezultate i kod pretraživanja u malim i velikim nizovima. Istodobno, vrijeme pretraživanja pomoću petlji značajno se povećava ovisno o veličini niza.

Najbolji članci na temu