Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • shtëpi
  • Windows 8
  • Php kërkimi në një grup sipas një pjese të vlerës. PHP: array_search - kërkim i shpejtë i grupit

Php kërkimi në një grup sipas një pjese të vlerës. PHP: array_search - kërkim i shpejtë i grupit

Një nga operacionet kryesore kur punoni me vargje është kërkimi i një vlere specifike. Funksioni PHP array_search() është krijuar për këtë. Është në gjendje të përpunojë koleksione njëdimensionale dhe shoqëruese, duke kthyer çelësin e vlerës së kërkuar nëse gjendet në grup.

Sintaksë

Përshkrimi i formalizuar i funksionit array_search() në PHP është si më poshtë:

Mixed array_search (vlera e përzier, grup $collection [, bool strikte])

Parametrat e hyrjes:

  • $collection - grupi në të cilin do të kryhet kërkimi;
  • vlera - vlera e dëshiruar e çdo lloji;
  • strikte është një flamur opsional boolean që vendos një mekanizëm të rreptë krahasimi të vetëdijshëm për llojin.

Mekanizmi i funksionimit

Funksioni PHP array_search() krahason vlerën një nga një me të gjitha vlerat në grupin e koleksionit. Si parazgjedhje, krahasimi kryhet pa marrë parasysh llojet e operandëve. Ky cilësim mund të ndryshohet duke vendosur flamurin e rreptë në TRUE. Krahasimet e vargjeve janë të ndjeshme ndaj shkronjave të vogla.

Nëse gjendet një përputhje, çelësi që korrespondon me elementin e gjetur kthehet dhe funksioni ndalon së funksionuari. Prandaj, nuk mund të përdoret për të zbuluar dukuri të shumta të vlerës së dëshiruar në një grup.

Nëse nuk gjenden përputhje, funksioni do të kthejë vlerën boolean FALSE.

Ju duhet të kontrolloni rezultatin e kthyer duke përdorur operatorin e rreptë të barazisë (===). Kjo është e rëndësishme sepse funksioni mund të kthejë një vlerë që është hedhur në FALSE, si p.sh. 0 ose vargun bosh.

Shembuj të përdorimit

Shembulli 1. Kur kaloni një grup shumëdimensional në funksionin PHP array_search(), rezultati i punës do të jetë çelësi i elementit të kërkuar.

"dimër", "stinë2" => "pranverë", "stinë3" => "verë", "stinë4" => "vjeshtë"); $rezultat1 = array_search ("dimër", $array); $rezultat2 = array_search ("verë", $array); $rezultat3 = array_search ("prill", $array); ?>

Në këtë shembull, $result1 do të vendoset në "season1", $result2 do të vendoset në "season3" dhe $result3 do të vendoset në vlerën boolean FALSE sepse vargu "prill" nuk shfaqet në grupin burimor.

Shembulli 2. Funksioni PHP array_search() mund të përpunojë gjithashtu një grup njëdimensional, duke i konsideruar çelësat e tij si indekset numerike të mëposhtme.

Variabla $result do të vendoset në 1, sipas indeksit të elementit "hunter" në grupin $.

Shembulli 3. Gabim i mundshëm gjatë analizimit të rezultatit.

"Washington", 1 => "Adams", 2 => "Jefferson", 3 => "Madison", 4 => "Monroe"); $rezultat = array_search ("Uashington", $presidents); nëse (!$result) ( jehonë "G. Washington nuk ishte presidenti i parë i SHBA"; ) ?>

Pra, pa kontrolluar rezultatin me barazi të rreptë, mund të merrni një mesazh të papritur se George Washington nuk ishte presidenti i parë i Shteteve të Bashkuara.

Shembulli 4: Kthehet vetëm çelësi i ndeshjes së parë të gjetur.

Edhe pse vlera që kërkoni shfaqet tre herë në grup, funksioni do të kthejë vetëm rezultatin e parë të gjetur - 0. Për të gjetur përputhje të shumta, rekomandohet të përdorni funksionin PHP array_keys().

(PHP 4 >= 4.0.5, PHP 5)

array_search -- Kërkon për një vlerë të caktuar në një grup dhe kthen çelësin përkatës nëse është i suksesshëm

Përshkrim

të përziera grupi_kërkimi(gjilpërë e përzier, grumbull kana [, bool strikte])

Kërkon kashtën për vlerën e gjilpërës dhe kthen çelësin nëse është i pranishëm në grup, I RREMË ndryshe.

Koment: Nëse gjilpëra është një varg, kryhet një krahasim i ndjeshëm ndaj rastit.

Koment: Deri në PHP 4.2.0, array_search () kthehet nëse nuk ka sukses I PAVLEFSHËM në vend të I RREMË .

Nëse kaloni vlerën E VËRTETË si një parametër i tretë opsional për të rreptë , funksionin array_search () do të kontrollojë gjithashtu llojin e gjilpërës në grupin e kashtës.

Nëse gjilpëra është e pranishme në kashtë më shumë se një herë, çelësi i parë i gjetur do të kthehet. Për të kthyer çelësat për të gjitha vlerat e gjetura, përdorni funksionin çelësat_array () me një parametër opsional search_value.


Shembulli 1: Shembulli i përdorimit array_search ()

$array = array(0 => "blu" , 1 => "e kuqe" , 2 => 0x000000 , 3 => "e gjelbër" , 4 => "e kuqe");$key = array_search ("e kuqe" , $array ); // $kyç = 1;
$key = array_search("jeshile" , $array ); // $kyç = 2; (0x000000 == 0 == "e gjelbër")
$key = array_search ("jeshile" , $array , e vërtetë ); // $kyç = 3;
?>
Kujdes

Ky funksion mund të kthehet si një vlerë boolean I RREMË, një vlerë jo-Boolean që është hedhur në I RREMË, për shembull 0 ose "". Për më shumë informacion, shihni seksionin Lloji Boolean. Përdorni operatorin === për të kontrolluar vlerën e kthyer nga ky funksion.

Unë kam përdorur funksionin array_search() për një kohë të gjatë për të kërkuar vlerat në një grup, pasi kam dëgjuar dhe lexuar vazhdimisht se funksionon dukshëm më shpejt sesa kërkimi përmes një grupi në një lak, por nuk e bëra e di sa më shpejt është. Më në fund arrita ta kontrolloja dhe numëroja vetë.

Kam krahasuar shpejtësinë e kërkimit nëpër një grup duke përdorur këtë funksion me kërkimin e zakonshëm përmes një grupi në sythe foreach dhe while. Në 10-100 elementë të grupit ndryshimi është i padukshëm dhe koha është aq e shkurtër sa mund të neglizhohet. Por për grupe të mëdha ndryshimi doli të ishte mjaft domethënës. Ndërsa madhësia e grupit u rrit me një renditje të madhësisë, koha e kërkimit gjithashtu u rrit ndjeshëm. Me njëqind mijë elementë, shpejtësia e foreach ra në 0,013 sekonda, dhe ndërsa - në 0,017, ndërsa array_search() gjithashtu u ngadalësua, por gjithsesi mbeti një rend i madhësisë më i shpejtë - 0,004 sekonda. Për një skript të madh që punon me vargje të mëdha, zëvendësimi i një kërkimi në një lak me një kërkim duke përdorur array_search() nuk do të jetë aspak një "optimizimi pleshti".

Në lidhje me këtë, m'u kujtua një diskutim i kohëve të fundit me një nga kolegët e mi në punë nëse një programues duhet të dijë të gjitha këto funksione të integruara gjuhësore, apo nëse mjaftojnë një "mendësi e programuesit" dhe njohuritë e përgjithshme. Pa hyrë në një diskutim pikërisht për këtë mentalitet, mendoj se duhet të njihni akoma funksionet, ndoshta jo të gjithë sintaksën në detaje, por të paktën cilat funksione ekzistojnë dhe çfarë mund të bëjnë në terma të përgjithshëm.

UPD: ju duhet edhe mendësia e një programuesi! Dhe të jesh i kujdesshëm me kujtesën tënde nuk do të dëmtojë (frymëzuar nga pushimi dhe diapazoni:)

Më poshtë hakimit është kodi i skriptit që është përdorur për të llogaritur kohën:

$masa=100000; // numri i vlerave në grupin në të cilin do të kërkojmë
$kërkim=50000; // ne do ta kërkojmë këtë vlerë në grup
$first_result=array(); // grup rezultatesh për të llogaritur vlerën mesatare të opsionit të parë
$second_result=array(); // grup rezultatesh për të llogaritur vlerën mesatare të opsionit të dytë
$tretë_rezultat=array(); // grup rezultatesh për të llogaritur vlerën mesatare të opsionit të tretë

// krijoni dhe mbushni grupin
$test_array = varg (0, $mass-1); // falë SelenIT))

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

// lak për të llogaritur vlerat mesatare
për ($d=0; $d<30; $d++) {

//**************** Kërko duke përdorur array_search *******************

// Filloni të numëroni kohën
$koh_fillimi = mikrokohë(1);
// kërkim
$key = array_search ($search, $test_array, e vërtetë);
// nëse gjendet
nëse ($key!==FALSE) // është e nevojshme!== dhe jo!=, sepse numri i elementit të parë është 0
{
echo $test_array[$key];
}
$time_fund = mikrokohë(1);
// fundi i numërimit të kohës

// shkruani në një grup vlerash
$first_result= $time_end - $time_start;

//**************** Kërko përmes një grupi me një lak foreach ******************

// Filloni të numëroni kohën
$koh_fillimi = mikrokohë(1);
// vetë kërkimi
foreach ($test_array si $ta)
{
nëse ($ta==$kërko)
{
jehonë $ta;
pushim;
}
}
$time_fund = mikrokohë(1);
// fundi i numërimit të kohës

// shkruani në një grup vlerash
$second_result= $time_end - $time_start;

//**************** Kërko përmes një grupi me një cikli while *****************

// Filloni të numëroni kohën
$koh_fillimi = mikrokohë(1);

// përcaktoni gjatësinë e grupit
$count=count ($test_array);
$j=0;
// vetë kërkimi
ndërsa ($j<$count)
{
nëse ($test_array[$j]==$kërkim) // nëse gjendet
{
echo $test_array[$j];
pushim;
}
$j++;
}
$time_fund = mikrokohë(1);
// fundi i numërimit të kohës

// shkruani në një grup vlerash
$third_result= $time_end - $time_start;
}

$srednee1=shuma_array ($rezultati i parë)/count ($rezultati i parë);
$srednee2=array_sum ($second_result)/count($second_result);
$srednee3=shuma_array ($treta_rezultati)/count ($treta_rezultati);

Printf("kodi i parë i përfunduar mesatarisht: %.7f sekonda", $srednee1);
printf("kodi i dytë i plotësuar mesatarisht në: %.7f sekonda", $srednee2);
printf("kodi i tretë i plotësuar mesatarisht në: %.7f sekonda", $srednee3);

// rezultat:
// Kodi i parë i plotësuar mesatarisht: 0.0000295 sekonda
// Kodi i dytë i plotësuar mesatarisht: 0,0153386 sekonda
// Kodi i tretë i plotësuar mesatarisht: 0.0226001 sekonda

Shpesh kur shkruani kod, duhet të kontrolloni nëse një vlerë e caktuar e elementit ekziston në një grup. Sot do të shikojmë disa funksione me të cilat mund ta bëni këtë.

Kontrollimi i pranisë së një vlere elementi në një grup mund të përdoret për të zgjidhur probleme të ndryshme programimi.

Ne mund të marrim vargje të ndryshme nga databaza jonë dhe të kontrollojmë praninë e një vlere të veçantë në të. Vlera e dëshiruar mund të transmetohet gjithashtu nga përdoruesi i skriptit tonë kur, për shembull, ai kërkon diçka. Bazuar në rezultatet e një kërkimi të tillë, mund të kryeni veprime të caktuara. E gjitha varet nga detyra specifike në fjalë, megjithatë, algoritmet për kërkimin e një vlere në një grup do të jenë të njëjta.

Sot do t'i shikojmë ato.

Kontrollimi i pranisë së një vlere në një grup. Funksioni in_array().

Funksioni in_array () do të na lejojë të kontrollojmë praninë e ndonjë vlere në grup.

Nëse rezultati i punës së tij është i suksesshëm dhe elementi i dëshiruar gjendet në grup, atëherë funksioni do të kthehet e vërtetë, domethënë "e vërteta".

Funksioni merr 2 parametra të kërkuar:<Что ищем>Dhe<Где ищем>.

Mund të marrë gjithashtu një parametër opsional:<Тип данных>. Nëse ky parametër i tretë opsional është vendosur në e vërtetë, atëherë kontrollohet edhe lloji i të dhënave. Kjo do të thotë, "2" dhe 2 nuk do të jenë e njëjta gjë. Në rastin e parë është një varg, në të dytën është një numër. Dhe pastaj i gjithë funksioni in_array () nuk do të kthejë një vlerë e vërtetë.

Ju gjithashtu duhet të mbani mend se funksioni kryen krahasime të ndjeshme ndaj rasteve.

Le të shohim se si funksionon ky funksion duke përdorur një shembull të thjeshtë.
Ne kemi nevojë për një lloj grupi. Duke përdorur funksionin, ne do të kontrollojmë praninë e një vlere në grup dhe do të shfaqim një mesazh specifik në ekran.

Pas ekzekutimit, funksioni do të shfaqë mesazhin "Po", pasi elementi "Marina" është i pranishëm në grupin tonë.

Ndryshoni parametrin e parë në funksion në ndonjë element që nuk ekziston dhe do të shihni mesazhin "Jo".

Kontrollimi i pranisë së një vlere në një grup. Funksioni array_search().

Ekziston një funksion tjetër kërkimi array_search (), i cili, ndryshe nga ai i mëparshmi, do të kthejë çelësin e elementit të gjetur. Kjo, nga ana tjetër, mund të jetë e dobishme nëse jemi duke punuar me një grup shoqërues.

Funksioni merr të njëjtat parametra si ai i mëparshmi. Në këtë rast, parametri i tretë është gjithashtu opsional.

Le të shohim se si mund të përdoret kur punoni me një grup shoqërues.

"tetor","money"=>200,"name"=>"Mila"); $key = array_search ("Mila",$Mass1); if($kyç) echo $key; ?>

Në këtë rast, ne do të shohim "emrin" në ekran, domethënë çelësin e elementit të dëshiruar me vlerën "Mila".

Këto dy funksione janë shumë të ngjashme dhe në thelb ndryshojnë vetëm në vlerën e kthimit.

Gjetja e një vlere në një grup shumëdimensional

Por, çka nëse jemi duke punuar me një grup shumëdimensional? Në fund të fundit, elementët e tij do të jenë vargje të tjera.

Këtu algoritmet që kemi diskutuar tashmë nuk do të funksionojnë.

Në fakt nuk është aq e komplikuar, thjesht duhet ta komplikoni pak të gjithë mekanizmin dhe të përdorni një lak, për shembull, per secilin(), i cili funksionon shkëlqyeshëm me vargje.

Le të themi se kemi një grup shumëdimensional. Vlerat e tij të menjëhershme janë vargje të tjera që mund të përmbajnë vlerën e dëshiruar të elementit.

Gjithçka që duhet të bëni është të kaloni nëpër elementet e grupit origjinal per secilin(). Çdo element i këtij grupi do të analizohet në një çelës ($key) dhe një vlerë ($value).

Vlera do të jetë secili prej vargjeve të vendosura brenda grupit kryesor shumëdimensional. Ne do të punojmë me këto vlera, duke kërkuar në çdo grup të brendshëm vlerën e elementit të dëshiruar.

Nëse gjendet, do të shfaqim një mesazh që thotë se një element i tillë ekziston, dhe nëse jo, do të shfaqim një mesazh tjetër që një element i tillë nuk ekziston.

Le t'i shohim të gjitha këto me kodin shembull:

"anna","id"=>234); $Mass2 = grup ("emri"=>"anton","id"=>24); $Mass2 = grup("emri"=>"ivan","id"=>007); foreach($Mass2 as $key => $value) ($name .= in_array("ivan",$value); ) if ($name) echo "OK! Elementi këtu!"; tjetër jehonë "Nuk ka element!"; ?>

Siç mund ta shihni, së pari ne deklarojmë vetë grupin shumëdimensional.

Për më tepër, këtu duhet të shkruani jo vetëm një shenjë të barabartë, por ".=".

Kjo bëhet në mënyrë që ndryshorja $name të mos mbishkruhet në çdo përsëritje, por të plotësohet. Në fund të fundit, nëse në përsëritjen e parë gjendet një element dhe vlera "true" shkruhet në ndryshoren $name, por në përsëritjen e dytë (d.m.th., në grupin e dytë të brendshëm) vlera e dëshiruar e elementit nuk është e pranishme. , atëherë vlera e ndryshores $name thjesht do të mbishkruhet, dhe në fund thjesht nuk do të marrim rezultatin e saktë.

Siç e kuptoni, rezultati i këtij kodi do të jetë mesazhi "OK! Elementi është këtu!

Provoni të ndryshoni elementin që kërkoni në një inekzistent dhe do të shihni mesazhin "Nuk ka element!"

Sigurisht, kur një element gjendet ose nuk gjendet, ne nuk mund të shfaqim vetëm mesazhe, por të bëjmë disa veprime të tjera. E gjitha varet nga ajo që duhet të bëni. Për shembull, nëse vlera e dëshiruar është në grup, ju mund t'i jepni përdoruesit disa informacione specifike, etj.

Kaq për sot! Shpresoj se mësimi ishte i qartë dhe i dobishëm! Provoni të shkruani vetë kod të ngjashëm për të kuptuar plotësisht gjithçka.

Dhe unë jam duke pritur për komentet tuaja.

Ndani mësimin me miqtë tuaj duke përdorur butonat social. rrjetet e vendosura më poshtë. Dhe gjithashtu abonohuni në përditësimet e blogut. Ne kemi mbledhur tashmë një arkiv mjaft të mirë të materialeve të dobishme, dhe ato vetëm do të plotësohen!

Ju uroj programim të suksesshëm!

Anna Kotelnikova ishte me ju!

Artikujt më të mirë mbi këtë temë