PHP Získejte minimální a maximální hodnoty ve dvourozměrném asociativním poli. Min - Najde nejmenší hodnotu Php počet minimálních hodnot v poli

(PHP 4, PHP 5, PHP 7)

min — Najde nejmenší hodnotu

Popis

Pokud je předán pouze jeden argument - pole čísel, min() vrátí nejmenší z nich. Pokud je první argument celé číslo nebo plovoucí číslo, pak musí existovat alespoň jeden další. V tomto případě funkce min() vrátí nejmenší z nich.

Komentář:

Hodnoty různých typů jsou porovnávány pomocí standardních porovnávacích pravidel. Například nečíselný řetězec ( tětiva) bude porovnáno s celým číslem ( celé číslo), jako by to bylo stejné 0 , ale několik řádků ( tětiva) budou porovnány podle abecedy. Vrácená hodnota zachová původní typ proměnné bez konverze.

Návratové hodnoty

Funkce min() vrátí hodnotu parametru, který je považován za "nejmenší" podle standardních porovnávacích pravidel. Pokud je několik hodnot různých typů navzájem shodných (tj. 0 A "abc"), pak bude vrácen první.

Příklady

Příklad č. 1 Příklad použití min()

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

// Řetězec "hello" je ve srovnání s int považován za 0
// Protože jsou obě hodnoty stejné, výsledek určuje pořadí parametrů
echo min(0, "ahoj"); // 0
echo min ("ahoj" , 0 ); // Ahoj

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

// Při porovnávání polí různých délek vrátí min kratší pole
$val = min (pole(2, 2, 2), pole(1, 1, 1, 1)); // pole(2, 2, 2)

// Porovnává se více polí stejné délky zleva doprava
// pro tento příklad: 2 == 2, ale 4< 5
$val = min (pole(2, 4, 8), pole(2, 5, 1)); // pole(2, 4, 8)

// Pokud se porovná pole a nepole, pole nebude nikdy vráceno
// protože pole jsou považována za větší než všechny ostatní hodnoty
$val = min ("řetězec" , pole(2, 5, 7), 42); //tětiva

// Pokud je jeden argument NULL nebo booleovský, bude porovnán s ostatními
// pomocí pravidla FALSE< TRUE, учитывая остальные типы аргументов
// V uvedeném příkladu jsou -10 a 10 považovány za TRUE
$val = min (- 10 , NEPRAVDA, 10 ); // NEPRAVDIVÉ
$val = min (- 10 , NULL , 10 ); // NULA

// na druhou stranu, 0 je považováno za FALSE, takže je "méně" než TRUE
$val = min(0, TRUE); // 0
?>

Pole jsou jedním z pohodlných strukturovaných způsobů ukládání informací. Každý prvek takového pole má své vlastní místo, svůj vlastní klíč a hodnotu. Obsah polí může být různý, jako je například databáze čísel, jmen nebo jednoduchých číselných hodnot. Když už mluvíme o číslech, můžeme se potýkat s různými druhy úkolů, například odvodit maximální nebo minimální hodnotu. Dnes si povíme, jak se to řeší v různých programovacích jazycích.

Nalezení největší a nejmenší hodnoty jednorozměrného pole v PHP

Všechna pole se liší svou strukturou. Zvažte dvě jednoduchá jednorozměrná pole, z nichž jedno neobsahuje klíče:

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

a jeden identický s předchozím, ale s klíči:

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

Zkusme zobrazit maximální a minimální hodnoty tohoto pole. K tomu použijeme standardní funkce " max" A " min“ respektive:

Echo max($moje_pole); // Tisk 74 echo min($my_array); // Tisk 2

Pokud se blíže podíváme na druhé pole, pak ve výsledku můžeme získat klíč maximálních nebo minimálních hodnot.

Použití pole jako příkladu

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

bude to vypadat takto:

$max = array_keys($moje_pole, max($moje_pole)); $max = $max;// Klíč maximální hodnoty $min = array_keys($moje_pole, min($moje_pole)); $min = $min; // Klíč minimální hodnoty echo $max; // Vytiskne výsledek maximální hodnoty

V souladu s tím je klíč maximální hodnoty „4“ a minimální hodnota je „6“.

Nalezení největší a nejmenší hodnoty vícerozměrného pole v PHP

Vícerozměrná pole se vyznačují svým vnořením. Například dvourozměrné pole by bez klíčů vypadalo takto:

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

A podle toho s určitými klíči:

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

V tomto případě je nalezení maximální a minimální hodnoty trochu obtížné, ale také možné.

Nejprve, abychom zde našli maximum a minimum, transformujeme pole na jednorozměrné:

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

Návrh funguje pro obě výše uvedené možnosti. A poté, podle příkladu jednorozměrného pole, zobrazíme data, která potřebujeme:

Echo max($out_array); // Tisk 74 echo min($out_array); // Tisk 2

Jako malý bonus uvedu příklad dalšího oblíbeného dvourozměrného pole:

$my_array = array(array("id" => "1", "date" => "2018-03-19", "price" => "5",), pole ("id" => "2" , "datum" => "2018-03-19", "cena" => "50", pole ("id" => "3", "datum" => "2018-03-19", " cena" => "25"));

Oblíbeností nemyslím obsah, ale příklad jeho struktury. Řekněme, že zde musíte vypsat maximální a minimální hodnoty pouze klíčů „cena“.

První věc, kterou v tomto případě potřebujete, je získat nové pole pouze s těmito daty:

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

Echo min($čísla); // Tisk 5 echo max($čísla); // Tisk 50

Tím je práce s poli v PHP dokončena. Pokud je náhle struktura vašeho pole jiná a nevíte, jak ji zpracovat, položte příslušnou otázku v komentářích, pokusím se vám pomoci.

Nalezení největší a nejmenší hodnoty jednorozměrného pole v JavaScriptu

Na rozdíl od PHP je typ polí v JavaScriptu mnohem jednodušší a jednoduché jednorozměrné pole bude vypadat takto:

Var my_array = ;

Nejsou zde uvedeny žádné indexy. Abychom našli maximální a minimální hodnoty v tomto poli, napíšeme dvě vlastní jednoduché funkce:

Funkce arrayMax(array) ( return array.reduce(function(a, b) ( return Math.max(a, b); )); ) function arrayMin(array) ( return array.reduce(function(a, b)) ( vrátit Math.min(a, b); )); )

které se používají k nalezení hodnot, které potřebujeme. Použití je také jednoduché:

Alert(poleMax(moje_pole)); // Tisk 74 alert(arrayMin(my_array)); // Tisk 2

V tomto případě se na obrazovce zobrazí čísla „2“ a „74“ jako minimální a maximální hodnoty pole.

Nalezení největší a nejmenší hodnoty vícerozměrného pole v JavaScriptu

Vícerozměrná pole v JavaScriptu jsou stejně jednoduchá a vypadají takto:

Var my_array = [ , , ];

Zkusme zde najít maximum a minimum. Nejprve napíšeme funkci, se kterou podle schématu, které již známe, budeme toto pole reprezentovat jako jednorozměrné:

Var out_array = ; moje_pole.proKazdy(funkce(v) (Array.prototype.push.apply(out_array, v); ));

A pomocí objektu " Matematika"získáme hodnoty, které potřebujeme:

Var min = Math.min.apply(null, out_array); // Získání 2 var max = Math.max.apply(null, out_array); // Získejte 74 alert(max); // Tisk 74 na obrazovku

Ve skutečnosti místo objektu " Matematika„Můžete použít naše funkce použité ve verzi s jednorozměrným polem, ale abyste pochopili, že jakýkoli problém lze vyřešit několika způsoby - zde jsem uvedl trochu jiné řešení.

No, jako tradičně – malý bonus. Uvažujme další vícerozměrné pole s následující strukturou:

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

Jak vidíme, číselné hodnoty v každém poli jsou na třetím místě. Pojďme napsat nějaký kód a získat odpovídající hodnoty pouze z těchto dat:

Var min = +nekonečno; var max = -nekonečno; moje_pole.forEach(funkce(položka) ( if(+položka< min) { min =+ item; // Ищем минимальное значение } }); my_array.forEach(function(item) { if(+item >max) ( max =+ položka; // Hledá se maximální hodnota ) )); alert(min+" "+max); // Zobrazení výsledku na obrazovce

To je vše. Nezapomeňte projekt podpořit. Čeká na vás spousta zajímavých věcí!

Mám pole v tomto formátu:

Pole ( => Pole ( => 117 => Sítě => 16) => Pole ( => 188 => FTP => 23) => Pole ( => 189 => Internet => 48))

Existuje dobrý způsob, jak získat minimální a maximální hodnoty „count“? Mohl bych to udělat pomocí více smyček, ale myslel jsem, že by mohl být lepší způsob.

Na rozdíl od jiných nemůžete pro tento problém použít funkce min() / max(), protože tyto funkce nerozumí polím dat (pole), která jim byla předána. Tyto funkce fungují pouze pro prvky skalárního pole.

START OBRÁZEK

Důvod, proč se zdá, že použití min() a max() dává správnou odpověď, je ten, že pole převádějí typ na celá čísla, což je nedefinované chování:

Chování převodu na celé číslo není pro jiné typy definováno. Nespoléhejte na žádné pozorované chování, protože se může bez varování změnit.

Moje výše uvedené tvrzení o typovém obsazení bylo chybné. Ve skutečnosti min() a max() pracují s poli, ale ne tak, jak je OP potřebuje, aby fungovaly. Při použití min() a max() s více poli nebo polem prvků pole porovnejte prvky prvek po prvku zleva doprava:

$val = min(pole(2, 4, 8), pole(2, 5, 1)); // array(2, 4, 8) /* * první prvek ve srovnání s prvním prvkem: 2 == 2 * druhý prvek ve srovnání s druhým prvkem: 4< 5 * first array is considered the min and is returned */

Přeloženo do problému, OP ukazuje, proč se zdá, že přímé použití min() a max() dává správný výsledek. První prvky pole jsou id , takže min() a max() je mimochodem nejprve porovnejte, což vede ke správnému výsledku, protože nejnižší id je ten, který má nejnižší počet a nejvyšší id je ten která má nejvyšší počet.

KONEC ÚPRAVY

Správný způsob je použít smyčku.

$a = array(array("id" => 117, "name" => "Networking", "count" => 16), array("id" => 188, "name" => "FTP", " počet" => 23), array("id" => 189, "název" => "Internet", "počet" => 48)); $min = PHP_INT_MAX; $max = 0; foreach ($a jako $i) ( $min = min($min, $i["počet"]); $max = max($max, $i["počet"]); )

Můžete použít funkce max() a min().

Co jste udělali s více smyčkami? Jeden Stačí :)

  1. Získejte první prvek spočítáním počtu $ min i max
  2. iterujte zbytek, porovnejte počet s každým $min a $max, pokud je menší/vyšší, přiřaďte novou hodnotu počtu

Můžete použít funkce max/min, protože vrátí pole obsahující maximum/minimum každého indexu. Váš příklad by měl vrátit array(189, "Networking", 48) pro max. Poté můžete získat skóre z tohoto pole.

Aktualizace nefunguje, jak jsem vyloučil. Příklad manuálové stránky je zavádějící a příklad dává správný výsledek pomocí max, ale to je jen náhoda.

Zdá se, že nemůžete použít max() na 2D pole. Vrátí pouze největší pole, nikoli max() každého indexu (jak je uvedeno v několika odpovědích).

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

Existuje ekvivalent vestavěný funkce pro toto? (i bez možnosti testování)

/** * načte sloupec z 2D pole s volitelným výběrem přes jiný sloupec * * @param $ aArray k načtení z * @param $ aColName název sloupce, který se má načíst, např. "O_NAME" * @param $aColTest (volitelné) název sloupce pro spuštění testu, např. "O_ID" * @param $aTest (nepovinný) řetězec pro test např. ">=10", "== "". $Toto. "" " * @return 1D pole s extrahovaným pouze sloupcem * @access public * / funkce extractColFromArray ($aArray, $aColName, $aColTest = "", $ aTest = "") ( $mRes = array()); foreach ($aArray jako $row) ( if (($aColTest == "") || (eval("return". $row[$aColTest]. $ aTest. ";"))) ( $ mRes = $ řádek [ $ aColName]; ) ) return $ mRes; ) // extractColFromArray