Maximálny počet v poli php. PHP Získajte minimálne a maximálne hodnoty v 2D asociatívnom poli. Nájdenie najväčšej a najmenšej hodnoty jednorozmerného poľa v PHP

  • 20.06.2020

Mám pole v tomto formáte:

Pole (=> Pole (=> 117 => Sieť => 16) => Pole (=> 188 => FTP => 23) => Pole (=> 189 => Internet => 48))

Existuje dobrý spôsob, ako získať minimálne a maximálne hodnoty „count“? Mohol by som to urobiť pomocou viacerých slučiek, ale myslel som si, že by mohol existovať lepší spôsob.

Na rozdiel od iných nemôžete na tento problém použiť funkcie min () / max (), pretože tieto funkcie nerozumejú poliam (poliam), ktoré im boli odovzdané. Tieto funkcie fungujú len pre prvky skalárneho poľa.

ZAČIATOČNÝ OBRÁZOK

Dôvod, prečo sa zdá, že použitie min () a max () dáva správnu odpoveď, sa týka polí pretypovania na celé čísla, ktoré sú nedefinovaným správaním:

Správanie pri prevode na celé číslo nie je pre ostatné typy definované. Nespoliehajte sa na žiadne pozorovateľné správanie, pretože sa môže zmeniť bez varovania.

Moje vyhlásenie vyššie o typovom obsadení bolo nesprávne. V skutočnosti min () a max () fungujú na poliach, ale nie tak, ako ich OP potrebuje, aby fungovali. Pri použití min () a max () s viacerými poľami alebo poľami prvkov poľa sa prvky porovnávajú prvok po prvku zľava doprava:

$ val = min (pole (2, 4, 8), pole (2, 5, 1)); // pole (2, 4, 8) / * * prvý prvok v porovnaní s prvým prvkom: 2 == 2 * druhý prvok v porovnaní s druhým prvkom: 4< 5 * first array is considered the min and is returned */

Preložené do problému OP ukazuje, prečo sa zdá, že priame použitie min () a max () dáva správny výsledok. Prvé prvky poľa sú id, takže min () a max () ich najprv porovnajte, mimochodom, vedú k správnemu výsledku, pretože najnižšie id je to s najnižším počtom a najvyššie id je to s najvyšší počet.

UKONČIŤ ÚPRAVU

Správny spôsob je použiť slučku.

$ a = pole (pole ("id" => 117, "názov" => "Sieť", "počet" => 16), pole ("id" => 188, "názov" => "FTP", " počet ="=> 23), pole (" id "=> 189," názov "=>" Internet "," počet "=> 48)); $ min = PHP_INT_MAX; $ max = 0; foreach ($ a ako $ i) ($ min = min ($ min, $ i ["počet"]); $ max = max ($ max, $ i ["počet"]);)

Môžete použiť funkcie max () a min ().

Čo ste urobili s viacerými slučkami? Jeden stačí 🙂

  1. Získajte prvú položku spočítaním min. aj max. $
  2. iterujte zvyšok, porovnajte počítadlo s každým $ min a $ max, ak je menšie / väčšie, priraďte novú hodnotu počítania

Môžete použiť funkcie max / min, pretože vrátia pole obsahujúce maximum / minimum každého indexu. Váš príklad by mal vrátiť pole (189, "Networking", 48) pre max. Potom môžete získať skóre z tohto poľa.

Aktualizácia nefunguje, ako som vylúčil. Príklad manuálovej stránky je zavádzajúci a príklad dáva správny výsledok pomocou max, ale to je len náhoda.

Zdá sa, že nemôžete použiť max () na 2D poli. Vracia len najväčšie pole, nie maximum () každého indexu (ako je uvedené vo viacerých odpovediach).

$ pocet = pole (); foreach ($ arr ako $ _arr) (počet $ = $ _arr ["počet"];) var_dump (max (počet $), min (počet $));

Existuje ekvivalent vstavaný funkciu na toto? (aj bez možnosti testovanie)

/ ** * získa stĺpec z 2D poľa s voliteľným výberom cez iný stĺpec * * @param $ pole aArray na získanie z * @param $ aColName názov stĺpca na získanie napr. "O_NAME" * @param $ aColTest (voliteľné) názov stĺpca pre spustenie testu, napr. "O_ID" * @param $ aTest (voliteľné) reťazec pre test napr. "> = 10", "==" ". $ Toto." "" * @Return 1D pole iba s extrahovaným stĺpcom * @access public * / function extractColFromArray ($ aArray, $ aColName, $ aColTest = "", $ aTest = "") ($ mRes = pole (); foreach ($ aArray ako $ riadok) (if (($ aColTest == "") || (eval ("návrat". $ riadok [$ aColTest]. $ aTest . ";"))) ($ mRes = $ riadok [$ aColName];)) return $ mRes;) // extractColFromArray

Polia sú jedným z pohodlných štruktúrovaných spôsobov ukladania informácií. Každý prvok takéhoto poľa má svoje vlastné miesto, svoj vlastný kľúč a hodnotu. Obsah polí môže byť rôzny, napríklad základ čísel, mien alebo jednoduchých číselných hodnôt. Keď už hovoríme o počte, môžeme čeliť rôznym druhom úloh, napríklad zobraziť maximálnu alebo minimálnu hodnotu. Dnes si povieme, ako sa to rieši v rôznych programovacích jazykoch.

Nájdenie najväčšej a najmenšej hodnoty jednorozmerného poľa v PHP

Všetky polia sa líšia svojou štruktúrou. Zvážte dve jednoduché jednorozmerné polia, z ktorých jedno neobsahuje kľúče:

$ moje_pole = pole (22, 24, 37, 74, 23, 2, 10);

a jeden identický s predchádzajúcim, ale s kľúčmi:

$ moje_pole = pole (1 => 22, 2 => 24, 3 => 37, 4 => 74, 5 => 23, 6 => 2, 7 => 10);

Pokúsme sa zobraziť maximálne a minimálne hodnoty tohto poľa. Na tento účel použijeme štandardné funkcie „ max" a " min"resp.:

Echo max ($ my_array); // Tlač 74 echo min ($ my_array); // Výstup 2

Ak sa bližšie pozrieme na druhé pole, potom môžeme získať kľúč maximálnych alebo minimálnych hodnôt.

Príklad poľa

$ moje_pole = pole (1 => 22, 2 => 24, 3 => 37, 4 => 74, 5 => 23, 6 => 2, 7 => 10);

bude to vyzerať takto:

$ max = array_keys ($ my_array, max ($ my_array)); $ max = $ max; // Kľúč maximálnej hodnoty $ min = kľúče_pola ($ my_array, min ($ my_array)); $ min = $ min; // Kľúč minimálnej hodnoty echo $ max; // Zobrazenie výsledku maximálnej hodnoty

V súlade s tým je kľúč pre maximálnu hodnotu "4" a minimálna hodnota je "6".

Nájdenie najväčšej a najmenšej hodnoty viacrozmerného poľa v PHP

Viacrozmerné polia sa líšia svojim vnorením. Napríklad dvojrozmerné pole by bez kľúčov vyzeralo takto:

$ moje_pole = pole (pole (22, 24, 37), pole (74, 23, 2), pole (10));

A teda s niektorými kľúčmi:

$ moje_pole = pole (pole (1 => 22, 2 => 24, 3 => 37), pole (4 => 74, 5 => 23, 6 => 2), pole (7 => 10));

V tomto prípade je nájdenie maximálnych a minimálnych hodnôt trochu ťažké, ale rovnako realistické.

Najprv, aby sme tu našli maximum a minimum, skonvertujeme pole na jednorozmerné:

$ out_array = pole (); foreach ($ my_array ako $ sub_array) ($ out_array = array_merge ($ out_array, $ sub_array);)

Konštrukcia funguje pre obe vyššie uvedené možnosti. A potom, podľa príkladu jednorozmerného poľa, zobrazíme údaje, ktoré potrebujeme:

Echo max ($ out_array); // Tlač 74 echo min ($ out_array); // Výstup 2

Ako bonus je tu príklad ďalšieho populárneho dvojrozmerného poľa:

$ my_array = pole (pole ("id" => "1", "dátum" => "2018-03-19", "cena" => "5", pole ("id" => "2" , "dátum" => "2018-03-19", "cena" => "50", pole ("id" => "3", "dátum" => "2018-03-19", " cena "=>" 25 ",));

Obľúbenosťou nemyslím obsah, ale ukážku jeho štruktúry. Povedzme, že tu musíte zadať maximálne a minimálne hodnoty iba kľúčov „cena“.

Prvá vec, ktorú v tomto prípade potrebujete, je získať nové pole iba s týmito údajmi:

$ čísla = pole_stĺpec ($ moje_pole, "cena");

Echo min (čísla $); // Tlač 5 echo max ($ čísla); // Výstup 50

Tým je práca s poliami v PHP hotová. Ak je zrazu štruktúra vášho poľa iná a neviete, ako ju spracovať - ​​položte príslušnú otázku v komentároch, pokúsim sa vám pomôcť.

Nájdenie najväčšej a najmenšej hodnoty jednorozmerného poľa v JavaScripte

Na rozdiel od PHP sú polia JavaScriptu oveľa jednoduchšie a jednoduché jednorozmerné pole by vyzeralo takto:

Var my_array =;

Nie sú tu špecifikované žiadne indexy. Aby sme našli maximálne a minimálne hodnoty v tomto poli, napíšeme dve z našich jednoduchých funkcií:

Funkcia arrayMax (pole) (vracia pole.reduce (funkcia (a, b) (vracia Math.max (a, b);));) funkcia arrayMin (pole) (vracia pole.reduce (funkcia (a, b) ( vrátiť Math.min (a, b);));)

ktoré sa používajú na nájdenie hodnôt, ktoré potrebujeme. Použitie je tiež jednoduché:

Upozornenie (poleMax (moje_pole)); // Upozornenie výstupu 74 (arrayMin (my_array)); // Výstup 2

V tomto prípade sa na obrazovke zobrazia čísla „2“ a „74“ ako minimálne a maximálne hodnoty poľa.

Nájdenie najväčšej a najmenšej hodnoty viacrozmerného poľa v JavaScripte

Viacrozmerné polia v JavaScripte sú rovnako jednoduché a vyzerajú takto:

Var my_array = [,,];

Skúsme tu nájsť maximum a minimum. Na začiatok napíšeme funkciu, pomocou ktorej podľa našej známej schémy budeme toto pole reprezentovať ako jednorozmerné:

Var out_array =; my_array.forEach (funkcia (v) (Array.prototype.push.apply (out_array, v);));

A pomocou objektu " Matematika„Dostávame hodnoty, ktoré potrebujeme:

Var min = Math.min.apply (null, out_array); // Získať 2 var max = Math.max.apply (null, out_array); // Získať upozornenie 74 (max.); // Zobrazenie 74 na obrazovke

V skutočnosti namiesto objektu " Matematika»Môžete použiť naše funkcie použité vo variante s jednorozmerným poľom, ale aby ste pochopili, že každý problém sa dá vyriešiť viacerými spôsobmi - tu som uviedol trochu iné riešenie.

No, podľa tradície - malý bonus. Zvážte ďalšie viacrozmerné pole s nasledujúcou štruktúrou:

Var my_array = [["Jedna", "2018-03-19", 5], ["Dva", "2018-03-19", 50], ["Tri", "2018-03-19", 25 ],];

Ako vidíme, číselné hodnoty v každom poli sú na treťom mieste. Napíšme nejaký kód a získajme zodpovedajúce hodnoty len z týchto údajov:

Var min = + Nekonečno; var max = -nekonečno; my_array.forEach (funkcia (položka) (ak (+ položka< min) { min =+ item; // Ищем минимальное значение } }); my_array.forEach(function(item) { if(+item >max) (max = + položka; // Hľadá sa maximálna hodnota))); upozornenie (min + "" + max); // Zobrazenie výsledku na obrazovke

To je všetko. Nezabudnite podporiť projekt. Čaká na vás veľa zaujímavých vecí!

(PHP 4, PHP 5, PHP 7)

min - Nájde najmenšiu hodnotu

Popis

Ak sa ako argument odovzdá iba jeden - pole čísel, min () vráti najmenší z nich. Ak je prvý argument celé číslo alebo pohyblivá čiara, potom musí existovať aspoň jeden ďalší. V tomto prípade funkcia min () vráti najmenší z nich.

Komentujte:

Hodnoty rôznych typov sa porovnávajú pomocou štandardných porovnávacích pravidiel. Napríklad nečíselný reťazec ( reťazec) sa porovná s celým číslom ( celé číslo) akoby sa rovnalo 0 , ale pár riadkov ( reťazec) budú porovnávané podľa abecedy. Návratová hodnota zachová pôvodný typ premennej bez konverzie.

Návratové hodnoty

Funkcia min () vráti hodnotu parametra, ktorý sa podľa štandardných pravidiel porovnávania považuje za „najmenší“. Ak je niekoľko hodnôt rôznych typov rovnakých (t.j. 0 a "abc"), prvý bude vrátený.

Príklady

Príklad č. 1 Príklad použitia min ()

echo min (2, 3, 1, 6, 7); // 1
echo min (pole (2, 4, 5)); // 2

// Reťazec "hello" sa v porovnaní s int považuje za 0
// Keďže obe hodnoty sú rovnaké, poradie parametrov určuje výsledok
echo min (0, "ahoj"); // 0
echo min ("ahoj", 0); // Ahoj

// Tu porovnávame -1< 0, поэтому -1 является наименьшим значением
echo min ("ahoj", - 1); // -1

// Pri porovnávaní polí rôznych dĺžok, min vráti kratšie
$ val = min (pole (2, 2, 2), pole (1, 1, 1, 1)); // pole (2, 2, 2)

// Niekoľko polí rovnakej dĺžky sa porovnáva zľava doprava
// pre tento príklad: 2 == 2, ale 4< 5
$ val = min (pole (2, 4, 8), pole (2, 5, 1)); // pole (2, 4, 8)

// Ak sa porovnáva pole a pole bez poľa, pole sa nikdy nevráti
// pretože polia sa považujú za väčšie ako všetky ostatné hodnoty
$ val = min ("reťazec", pole (2, 5, 7), 42); // reťazec

// Ak je jeden argument NULL alebo booleovský, potom sa porovná so zvyškom
// pomocou pravidla FALSE< TRUE, учитывая остальные типы аргументов
// Vo vyššie uvedenom príklade sú -10 a 10 považované za TRUE
$ val = min (- 10, NEPRAVDA, 10); // FALSE
$ val = min (- 10, NULL, 10); // NULOVÝ

// na druhej strane 0 sa považuje za NEPRAVDA, takže je "menej" ako PRAVDA
$ val = min (0, TRUE); // 0
?>