Brza pretraga u php nizu. PHP array_search: Traži vrijednost u nizu. PHP sintaksa i jezičko okruženje

Programiranje se odnosi na sintaksu i semantiku. Prvi je određen pravilima jezika, drugi iskustvom programera. Što se tiče nizova, programer može posebno učitati sintaksu semantikom. Ovo još uvijek nije objekt, ali više nije niz u tradicionalnom smislu. PHP vam daje mogućnost da kreirate nizove varijabli različitih tipova, uključujući i njih same. Element niza može biti funkcija, odnosno sposobnost učitavanja niza pravim algoritmom, pravim značenjem.

Sintaksa je stabilna, ali se mijenja od verzije do verzije i možda nije uvijek kompatibilna čak ni odozdo prema gore. Prenosivost programa je dobro zaboravljeno dostignuće prošlog veka. 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 bilo predviđeno pravilima jezika. Ovo se najlakše može razumjeti na primjeru nizova.

Izgradnja nizova

Niz u PHP-u ima zgodnu sintaksu i funkcionalnost. Ovo se može unaprijed opisati, ali je često zgodno kreirati nizove u hodu po potrebi.

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

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

Kreiranje niza uz provjeru uslova:

$cSrcLine = "analizirana linija podataka";

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

if (checkFunc($cSrcLine, $cUserLine) (

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

$aResult = "Ne";

Kao rezultat izvršavanja ovog primjera, kreirat će se niz od 13 elemenata, čije će vrijednosti biti samo nizovi "Da" ili "Ne". Elementi će dobiti indekse od 0 do 12. Isti efekat se može postići ako prvo upišete "buduće" PHP niz u niz:

$cFutureArray = "";

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

$cUserLine = inputUserLine(); // unijeti nešto

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

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

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

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

Višedimenzionalni nizovi

Mnogi sistemi za upravljanje sadržajem (CMS) koriste nizove na veliki način. S jedne strane, ovo je dobra praksa, s druge strane otežava korištenje. Čak i ako autor razumije doktrinu „PHP niz unutar niza“, ne bi trebao da je zloupotrebljava: ne samo da će programer morati da se navikne na složenu notaciju. Često će se, nakon nekog vremena, i sam kreator dugo sjećati onoga š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š inspirativno, ali radi i čini ovaj okvir uspješnim (primjer iz ZendSkeletonApplication/module/Helloworld/config/module.config.php) .

Niz je važna konstrukcija podataka tokom dizajna i razvoja. Njegova višedimenzionalna verzija je nekada bila popularna, ali s vremenom je ostala potreba za nizovima od najviše dvije ili tri dimenzije. Ovako je jednostavnije i jasnije, a sa profesionalne tačke gledišta, kada se nešto počne množiti, to znači da nešto nije u redu u iskazu problema ili u kodu.

Jednostavno, pristupačno i razumljivo

Kada kreirate niz unutar niza u PHP-u, najbolje je da se ograničite na dva ili tri nivoa. Uprkos stabilnosti i pouzdanosti PHP-a, on pravi greške prilikom obrade sintaksičkih struktura. Ovo možete podnijeti ako imate dobar uređivač koda i naviknete se na precizno brojanje zagrada i zareza. Međutim, PHP ne kontroliše tipove podataka (ovo je karma modernog programiranja) i dozvoljava programeru da praktikuje semantičke greške.

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

PHP ima značajnu negativnu osobinu: kada se pojavi nesigurnost, skripta se jednostavno zamrzne. Ne mogu svi programi za otklanjanje grešaka podnijeti nepredviđene okolnosti, a mnogo toga ovisi o iskustvu i intuiciji programera. Što je algoritam jednostavniji, što su informacije pristupačnije strukturirane, veće su šanse da se pronađe greška ili da se ona potpuno spriječi.

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 opstao i stekao novu efektivnu sintaksu, dok je drugi postao istorija.

Jednostavni i asocijativni nizovi

Zapis za dvodimenzionalni niz je još jedan par zagrada "[" i "]", na primjer: $aSrcData znači pristup elementu niza uključenom u niz $aSrcData. Ne postoji obaveza da se podaci unapred deklarišu u PHP-u. Bilo koja navedena informacija se uvijek može provjeriti da li postoji.

Veoma je delotvorno stvarati nešto samo kada je potrebno, u obliku u kom se tražilo, i uništavati kada je potreba za tim nestala. Koristeći smislena imena kao ključeve (indekse), možete dobiti čitljive konstrukcije koje su smislene u kontekstu trenutnog mjesta u algoritmu:

$aAnketa["name"] = "Ivanov";
$aAnketa["starost"] = 42;
$aAnketa["work"] = "Direktor";
$aAnketa["active"] = istina;
$aTable = $aAnketa;

$aAnketa["name"] = "Petrov";
$aAnketa["starost"] = 34;
$aAnketa["work"] = "Menadžer";
$aAnketa["active"] = istina;
$aTable = $aAnketa;

$aAnketa["name"] = "Afanasjev";
$aAnketa["starost"] = 28;
$aAnketa["work"] = "Radnik";
$aAnketa["active"] = netačno;
$aTable = $aAnketa;

$sOne .= implode ("; ", $aTable) . "
"; // drugi PHP niz u string
$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", "starost", "rad", "aktivan"):

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

Ovaj jednostavan primjer pokazuje kako se kreirani upitnik može primijeniti na sve zaposlenike. Možete kreirati niz zaposlenika s indeksima prema brojevima osoblja i, ako vam je potreban određeni zaposlenik, onda ga odabrati prema broju osoblja.

Ako organizacija ima odjeljenja, ili postoje sezonski radnici, ili trebate posebno identificirati zaposlene penzionere, ... dizajn “PHP niz u nizu” je vrlo zgodan, ali nikada se ne biste trebali zanositi dimenzijom. Dvije ili tri dimenzije su granica za efikasno rješenje.

Tasteri za rad sa nizovima

Ako je prije bilo važno kako je sve uređeno, onda su posljednjih godina potpuno zaboravljene tradicije binarne ere, kada je programer želio znati kako se tačno pohranjuju elementi niza i želio je imati direktan pristup njima. Pojavila su se mnoga kodiranja znakova koja zauzimaju više od jednog bajta u memoriji. Riječ "bit" sada se može naći samo u operacijama pretraživanja bitova, ali pretraživanje PHP niza 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) su numerisani 0, 1, 2,... U drugom slučaju, programer specificira svoj indeks, koji se često naziva "ključ", za pristup željenu vrijednost.

$aLine["fruit"] = "narandžasta"; // ovdje PHP array key = "voće"

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

$aLine = iconv("UTF-8", "CP1251", "narandžasta");

Prilikom dodavanja nove vrijednosti u niz $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 . "
";
}

će biti primljeno:

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

PHP ključ niza kada se dodaju elementi “breskva” i “patlidžan” formira se uzastopno od 0, a prilikom navođenja njegove vrijednosti bit će jednak ovoj vrijednosti.

Uklanjanje elemenata iz niza

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

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

unset($aLine); // ukloniti element niza PHP

tada će rezultat biti:

voće=narandža
povrće=krastavac
1=patlidžan

Postoji mnogo opcija za manipulaciju elementima niza. Na primjer, koristeći funkcije: implode() i explode(), možete napisati PHP niz u string s jednim graničnikom i raščlaniti ga natrag u drugi niz koristeći drugačiji graničnik.

Da jednostavno izbrišete čitav niz u PHP-u, samo napišite: unset($aLine);

To je dovoljno.

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žite PHP nizove.

Svaki projekat ima specifično konstruisane nizove, posebno kada se deo semantike prenosi u sintaksu i predstavlja skupom vrlo specifičnih značajnih ključeva. Ovo vam omogućava da izvršite vlastite funkcije pretraživanja, koje se također mogu označiti na smislen način.

U PHP-u možete pozvati funkcije čije se ime određuje tokom izvršavanja programa. Vrlo praktičan primjer iz PHPWord biblioteke, koja vam omogućava da čitate i kreirate MS Word dokumente:

$elements = array("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Tabela", "Slika", "Objekat", "Fusnota",
"Endnote", "CheckBox", "TextBox", "Field", "Line");

$functions = array();

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

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

Pozivanjem $functions na $elementima, možete dobiti savršenu pretragu i brze rezultate.

Sortiranje stavki

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 treba zaboraviti da elementi ne mogu imati samo različite tipove, već i ne potpuno prirodan sadržaj. Prije svega, morate biti vrlo oprezni u sortiranju nizova koji sadrže ruska slova, sortiranje 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 može lako transformisati u string i vratiti nazad. Ovo vam omogućava da pohranite podatke u kompaktnom prikazu i proširite ih u prikladno stanje po potrebi.

Niz pretvoren u string otvara nove mogućnosti. Na primjer, zadatak traženja ključnih riječi u tekstu zahtijeva da se ono što se nađe ne dodaje ponovo.

$cSrcLine = "Text Text ListItemRun TextBox ListItem TextBox Polje za potvrdu Polje za potvrdu TextBox Fusnota";

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

za ($i=0; $i< count($aSrc); $i++) {
$cFind = "[" . $aSrc[$i] . "]";
if (! is_integer(strpos($cDstLine, $cPronađi))) (
$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: "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Fusnote".

Ruski jezik u ključevima i značenjima

Ne preporučuje se korištenje bilo čega što je povezano s nacionalnim kodiranjem u sintaksičkim strukturama. Ruski, kao i svi drugi jezici čiji se znakovi protežu dalje od a-z, neće stvarati probleme jer se nalazi u području podataka, ali ne i u sintaksi koda. Ponekad će čak i jednostavan zadatak u PHP-u „izbaciti niz na štampač ili na ekran“ dovesti do „ludih grešaka“, a češće će skripta jednostavno stati.

PHP je lojalan jezik i tolerantan je na nacionalna kodiranja, ali postoje mnoge situacije kada se završena količina posla mora ponovo obaviti samo zato što ključna vrijednost iskoči na pravom mjestu iu pravo vrijeme, što nije moguće prepoznati.

PHP sintaksa i jezičko okruženje

Treba imati na umu da je PHP sintaksa jedna stvar, ali konstrukcije ove sintakse se „bave“ sa drugim aplikacijama, sa operativnim sistemom, sa hardverskim opcijama. Postoji mnogo opcija, nikad nije moguće sve obezbijediti.

Pravilo „u kodu postoji samo kod, ali na ulazu, unutra i izlazu ima raznih informacija“ pomoći će da se izbjegnu nepredviđena iznenađenja. PHP vrijednost u nizu može biti "ruska", ali ključ za nju mora biti sintaktički ispravan ne samo sa stanovišta datog jezika, već i sa stanovišta njegovog operativnog okruženja.

(PHP 4 >= 4.0.5, PHP 5)

array_search -- Traži datu vrijednost u nizu i vraća odgovarajući ključ ako je uspješan

Opis

mješovito array_search(mješovita igla, niz sijena [, bool strict])

Traži vrijednost igle u plastu sijena i vraća ključ ako je prisutan u nizu, FALSE inače.

komentar: Ako je igla niz, vrši se poređenje osjetljivo na velika i mala slova.

komentar: Do PHP 4.2.0, array_search() vraćen ako ne uspije NULL umjesto FALSE .

Ako proslijedite vrijednost ISTINITO kao opcioni treći parametar za strict , funkciju array_search()će također provjeriti vrstu igle u nizu plasta sijena.

Ako se igla nalazi u plastu sijena više puta, prvi pronađeni ključ će biti vraćen. Da biste vratili ključeve za sve pronađene vrijednosti, koristite funkciju array_keys() sa opcijskim parametrom search_value.


Primjer 1: Primjer upotrebe array_search()

$array = array(0 => "plavo" , 1 => "crveno" , 2 => 0x000000 , 3 => "zeleno" , 4 => "crveno" );$key = array_search ("crveno" , $array ); // $ključ = 1;
$key = array_search("zeleno", $array); // $ključ = 2; (0x000000 == 0 == "zeleno")
$key = array_search ("zeleno", $array, istina); // $ključ = 3;
?>
Pažnja

Ova funkcija se može vratiti kao logička vrijednost FALSE, ne-Boolean vrijednost na koju se prebacuje FALSE, na primjer 0 ili "". Za više informacija pogledajte odjeljak Boolean tip. Koristite === operator da provjerite vrijednost koju vraća ova funkcija.

od multidimenzionalnog (18)

Modificirao sam jedan od primjera ispod kako bih opisao funkciju array_search. Funkcija searchItemsByKey vraća sve vrijednosti po $key iz višedimenzionalnog niza (N nivoa). Možda bi ovo nekome bilo od koristi. primjer:

$arr = array("XXX"=>array("YYY"=> array("AAA"=> array("keyN" =>"value1")), "ZZZ"=> array("BBB"=> niz ("keyN" => "value2")) //.....)); $result = searchItemsByKey($arr,"keyN"); print "

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

Šifra funkcije:

Funkcija searchItemsByKey($array, $key) ( $results = array(); if (is_array($array)) ( if (isset($array[$key]) && key($array)==$key) $results = $array[$key] foreach ($array kao $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) treba da vrati 0.

Poziv funkcije search_by_uid(40489) trebao bi vratiti 2 .

Pokušao sam kreirati petlje, ali mi je potrebno brže izvršavanje koda.

Nadovezujući se na Jakubov odličan odgovor, evo generaliziranije pretrage koja će vam omogućiti da navedete ključ (ne samo za uid):

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

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

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

Upalit će. Trebali biste 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 tražiti string ili jednostavno koristiti == umjesto === .

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

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

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

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

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

// Niz podataka korisnika $userdb = niz (niz ("uid" => "100","name" => "Sandra Shush","url" => "urlof100"), niz ("uid" => " 5465","name" => "Stefanie Mcmohn","url" => "urlof100"), array ("uid" => "40489","name" => "Michael","url" => "urlof40489 "),); // Dobivanje ključa niza $arrayKey = searchArrayKeyVal("uid", "100", $userdb); if ($arrayKey!==false) ( echo "Rezultat pretrage: ", $userdb[$arrayKey]["name"]; ) else ( echo "Rezultat pretrage nije moguće pronaći"; )

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

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

="2""; $Array = array("a" => array("d" => "2"), array("a" => "Svijet primjera","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"79c => 3.29, "discount_id" => "5a92656a14d488570c2c44a2", ], [ "_id"79c "f69c" count_amount" => 4,53, " discount_id" => "5a9265b914d488548513b122", ], [ "_id" => "5a98083614d488191304b6c3", "discount_amount" => 15.24, "discount_id" => "06a59", "discount_id" => "6858" id" > "5a982a4914d48824721eafe3", "discount_amount " => 45.74, "discount_id" => "5a928ce414d488609e73b443", ], [ "_id" => "5a982a4914d48824721eafe55", "discount_amount" => 10.26, "discount_amount" => 10.26" 10.26"404088d78 "> b4 43", ], ];

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

Probajte 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 kao $key => $vrijednost) (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"]]; $found = null; $search = "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 ga možete lako dodati. Htio sam u suštini tražiti više od samo uid-a.

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

/** * @param niz višedimenzionalni * @param vrijednost stringa za traženje, tj. specifično ime polja kao što je name_first * @param string asocijativni ključ za pronalaženje, tj. field_name * * @return ključevi niza. */ function search_revisions($dataArray, $search_value, $key_to_search) ( // Ova funkcija će pretraživati ​​revizije za određenu vrijednost // u vezi sa 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 bi mi omogućio da tražim drugu vrijednost i asocijativni ključ. Dakle, moj prvi primjer vam omogućava 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 specifičnom ključu asocijacije (first_name). I druga vrijednost (true) se nalazi u drugom asocijativnom ključu (koristi se) i vraća sva podudaranja (Ključevi u kojima se koriste ljudi pod imenom "Taylor" I).

/** * @param niz višedimenzionalni * @param string $search_value Vrijednost za traženje, tj. određeni "Taylor" * @param niz $key_to_search Asocijativni ključ za pronalaženje, tj. ime_napisa * @param string $other_matching_key Asocijativni ključ za pronalaženje u podudaranjima za zaposlene * @param string $other_matching_value Vrijednost koju treba pronaći u tom odgovarajućem asocijativnom ključu, tj. true * * @return niz ključeva, tj. sve osobe sa imenom "Taylor" koje su zaposlene. */ function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null) ( // Ova funkcija će pretraživati ​​revizije za određenu vrijednost // u vezi sa asocijativnim ključem koji tražite. $ ključevi = array($dataArray kao $key => $cur_value) (if ($cur_value[$key_to_search] == $search_value) (if (isset($other_matching_key) && isset($other_matching_value)) ) ( if ( $cur_value[$other_matching_key] == $other_matching_value) ( ​​$keys = $key; ) ) else ( // Moram imati na umu da neke pretrage mogu imati više // podudaranja, a druge ne, tako da ostavite ga otvorenim bez nastavljanja $keys = $key ) return $keys;

Korištenje funkcije

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

Rezultat

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($haystack kao $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 === $ igle visibility); postavljanje na 1 skriveno"); vrati True; ) ) return False; )

Ako koristite (PHP 5>=5.5.0) ne morate pisati vlastitu funkciju za ovo, samo napišite ovaj red i gotovo.

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 sa:

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

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

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

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

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

Proširujući @mayhemovu kreiranu funkciju, ovaj primjer bi bio više kao "nejasna" pretraga ako samo želite da uskladite dio ( veliki dio) nizovi za pretraživanje:

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

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

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

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

$search1 = "demo"; $search2 = "bob"; $arr = array("0" => "zdravo","1" => "test","2" => "john","3" => array("0" => "martin", "1 " => "bob"),"4" => "demo"); foreach ($arr kao $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 tipove parametara. Ali radi samo sa jednostavnim tipovima kao što su int, bool i float.

$unsafe_variable = $_POST["user_id"]; $safe_variable = (int)$unsafe_variable ; mysqli_query($conn, "INSERT INTO table (kolumn) VALUES ("" . $safe_variable . "")");