PHP Získajte minimálne a maximálne hodnoty v dvojrozmernom asociatívnom poli. Min - nájde najmenšiu hodnotu Php ako počet minimálnych hodnôt v poli

(PHP 4, PHP 5, PHP 7)

min — Nájde najmenšiu hodnotu

Popis

Ak je odovzdaný iba jeden argument - 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), ako keby to bolo rovnaké 0 , ale niekoľko 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 navzájom rovnakých (t.j. 0 A "abc"), potom bude vrátený prvý.

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 reťazcom 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 to kratšie
$val = min (pole(2, 2, 2), pole(1, 1, 1, 1)); // pole(2, 2, 2)

// Viaceré polia rovnakej dĺžky sa porovnávajú 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ý, porovná sa s ostatnými
// pomocou pravidla FALSE< TRUE, учитывая остальные типы аргументов
// V uvedenom príklade sú -10 a 10 považované za TRUE
$val = min (- 10 , FALSE , 10 ); // FALSE
$val = min (- 10, NULL, 10); // NULOVÝ

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

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, ako napríklad databáza čísel, mien alebo jednoduchých číselných hodnôt. Keď už hovoríme o číslach, môžeme sa stretnúť s rôznymi druhmi úloh, napríklad odvodiť 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:

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

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

$my_array = 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($moje_pole); // Tlač 74 echo min($my_array); // Tlač 2

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

Použitie poľa ako príklad

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

bude to vyzerať takto:

$max = array_keys($moje_pole, max($moje_pole)); $max = $max;// Kľúč maximálnej hodnoty $min = array_keys($moje_pole, min($moje_pole)); $min = $min; // Kľúč minimálnej hodnoty echo $max; // Vytlačí výsledok maximálnej hodnoty

V súlade s tým je kľúč maximálnej hodnoty „4“ a minimálna hodnota je „6“.

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

Viacrozmerné polia sa vyznačujú 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 určitými kľúčmi:

$my_array = 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 tiež možné.

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

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

Dizajn 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); // Tlač 2

Ako malý bonus uvediem 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 príklad 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:

$cisla = array_column($moje_pole, "cena");

Echo min($čísla); // Tlač 5 echo max($čísla); // Tlač 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 je typ polí v JavaScripte oveľa jednoduchší a jednoduché jednorozmerné pole bude vyzerať takto:

Var my_array = ;

Nie sú tu uvedené žiadne indexy. Aby sme našli maximálne a minimálne hodnoty v tomto poli, napíšeme dve vlastné jednoduché funkcie:

Funkcia arrayMax(pole) ( return array.reduce(function(a, b) ( return Math.max(a, b); )); ) function arrayMin(array) ( return array.reduce(function(a, b)) ( vrátiť Math.min(a, b); )); )

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

Alert(poleMax(moje_pole)); // Tlač 74 alert(arrayMin(my_array)); // Tlač 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, s ktorou podľa schémy, ktorú už poznáme, budeme toto pole reprezentovať ako jednorozmerné:

Var out_array = ; moje_pole.pre kazdeho(funkcia(v) ( Array.prototype.push.apply(out_array, v); ));

A pomocou objektu " Matematika"Dostaneme 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); // Tlač 74 na obrazovku

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

Ako už tradične - malý bonus. Zoberme si ď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; moje_pole.forEach(funkcia(položka) ( if(+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í!

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 údajov (pole), 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ď, je ten, že polia sú typové pretypovanie na celé čísla, čo je nedefinované správanie:

Správanie prevodu na celé číslo nie je definované pre iné typy. Nespoliehajte sa na žiadne pozorované 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 () pracujú s poľami, ale nie tak, ako ich OP potrebuje na fungovanie. Pri použití min() a max() s viacerými poľami alebo poľom prvkov poľa porovnávajte prvky prvok po prvku zľava doprava:

$val = min(pole(2, 4, 8), pole(2, 5, 1)); // array(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 */

V preklade 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 najskôr porovnajte, čo vedie k správnemu výsledku, pretože najnižšie id je to, ktoré má najnižší počet a najvyššie id je to ktorá má najvyšší počet.

UKONČIŤ ÚPRAVU

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

$a = array(array("id" => 117, "name" => "Sieť", "count" => 16), array("id" => 188, "name" => "FTP", " počet" => 23), pole("id" => 189, "meno" => "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ý prvok spočítaním počtu $ min aj max
  2. iterujte zvyšok, porovnajte počet s každým $min a $max, ak je menšia/väčšia priraďte novú hodnotu počtu

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. Len vráti najväčšie pole, a nie max() každého indexu (ako je uvedené v niekoľký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 $ aArray na získanie z * @param $ aColName názov stĺpca, ktorý sa má získať, napr. "O_NAME" * @param $aColTest (voliteľné) názov stĺpca na spustenie testu, napr. "O_ID" * @param $aTest (voliteľné) reťazec pre test napr. ">=10", "== "". $Toto. "" " * @return 1D pole s extrahovaným iba stĺpcom * @access public * / function extractColFromArray ($aArray, $aColName, $aColTest = "", $ aTest = "") ( $mRes = array()); foreach ($aArray ako $row) ( if (($aColTest == "") || (eval("return". $row[$aColTest]. $ aTest. ";"))) ( $ mRes = $ riadok [ $ aColName]; ) ) návrat $ mRes; ) // extractColFromArray