PHP Få minimums- og maksimumsverdiene i en todimensjonal assosiativ matrise. Min - Finner den minste Php-verdien antall minimumsverdier i matrisen

(PHP 4, PHP 5, PHP 7)

min — Finner den minste verdien

Beskrivelse

Hvis bare ett argument blir bestått - en rekke tall, min() returnerer den minste av dem. Hvis det første argumentet er et heltall eller float, må det være minst ett til. I dette tilfellet funksjonen min() vil returnere den minste av dem.

Kommentar:

Verdier av forskjellige typer sammenlignes ved å bruke standard sammenligningsregler. For eksempel, en ikke-numerisk streng ( streng) vil bli sammenlignet med et heltall ( heltall) som om det var likt 0 , men flere linjer ( streng) vil bli sammenlignet alfabetisk. Returverdien vil beholde den opprinnelige typen til variabelen, uten konvertering.

Returverdier

Funksjon min() returnerer verdien til parameteren som anses som den "minste" i henhold til standard sammenligningsregler. Hvis flere verdier av forskjellige typer er lik hverandre (dvs. 0 Og "abc"), så vil den første bli returnert.

Eksempler

Eksempel #1 Brukseksempel min()

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

// Strengen "hallo", sammenlignet med int, behandles som 0
// Siden begge verdiene er like, bestemmer rekkefølgen av parameterne resultatet
echo min(0, "hei"); // 0
echo min ("hei", 0 ); // Hallo

// Her sammenligner vi -1< 0, поэтому -1 является наименьшим значением
echo min ("hei" , - 1 ); // -1

// Når du sammenligner arrays av forskjellige lengder, vil min returnere den kortere
$val = min (array(2 , 2 , 2 ), array(1 , 1 , 1 , 1 )); // array(2, 2, 2)

// Flere arrays av samme lengde sammenlignes fra venstre til høyre
// for dette eksemplet: 2 == 2, men 4< 5
$val = min (array(2 , 4 , 8 ), array(2 , 5 , 1 )); // array(2, 4, 8)

// Hvis en matrise og en ikke-matrise sammenlignes, vil matrisen aldri bli returnert
// siden matriser anses som større enn alle andre verdier
$val = min ("streng" , array(2 , 5 , 7 ), 42 ); //streng

// Hvis ett argument er NULL eller boolsk, vil det bli sammenlignet med de andre
// ved å bruke FALSE-regelen< TRUE, учитывая остальные типы аргументов
// I eksemplet som er gitt, behandles -10 og 10 som SANN
$val = min (- 10 , FALSE , 10 ); // FALSK
$val = min (- 10 , NULL , 10 ); // NULL

// på den annen side behandles 0 som FALSE, så den er "mindre" enn TRUE
$val = min(0, TRUE); // 0
?>

Matriser er en av de praktiske strukturerte måtene å lagre informasjon på. Hvert element i en slik matrise har sin egen plass, sin egen nøkkel og verdi. Innholdet i matriser kan være forskjellig, som for eksempel en database med tall, navn eller enkle numeriske verdier. Når vi snakker om tall, kan vi bli møtt med ulike typer oppgaver, for eksempel å trekke ut maksimums- eller minimumsverdien. I dag skal vi snakke om hvordan dette løses på forskjellige programmeringsspråk.

Finne den største og minste verdien av en endimensjonal matrise i PHP

Alle arrays er forskjellige i deres struktur. Tenk på to enkle endimensjonale arrays, hvorav den ene ikke inneholder nøkler:

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

og en identisk med den forrige, men med nøkler:

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

La oss prøve å vise maksimums- og minimumsverdiene til denne matrisen. For å gjøre dette vil vi bruke standardfunksjoner " maks"Og" min" henholdsvis:

Ekko maks($my_array); // Skriv ut 74 echo min($my_array); // Skriv ut 2

Hvis vi ser nærmere på den andre matrisen, kan vi som et resultat få nøkkelen til maksimums- eller minimumsverdiene.

Bruke en matrise som eksempel

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

det vil se slik ut:

$max = array_keys($my_array, max($my_array)); $max = $max;// Maksimalverdinøkkel $min = array_keys($my_array, min($my_array)); $min = $min; // Minimum verdi nøkkel echo $max; // Skriv ut resultatet av maksimumsverdien

Følgelig er maksimalverdinøkkelen "4", og minimumsverdien er "6".

Finne den største og minste verdien av en flerdimensjonal matrise i PHP

Flerdimensjonale arrayer utmerker seg ved hekking. For eksempel vil en todimensjonal matrise se slik ut uten nøklene:

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

Og følgelig med visse nøkler:

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

I dette tilfellet er det litt vanskelig å finne maksimums- og minimumsverdiene, men også mulig.

Først, for å finne maksimum og minimum her, transformerer vi matrisen til en endimensjonal:

$out_array = array(); foreach($my_array som $sub_array) ( $out_array = array_merge($out_array, $sub_array); )

Designet fungerer for begge alternativene ovenfor. Og så, etter eksemplet med en endimensjonal matrise, vil vi vise dataene vi trenger:

Ekko maks($out_array); // Skriv ut 74 echo min($out_array); // Skriv ut 2

Som en liten bonus vil jeg gi et eksempel på en annen populær todimensjonal matrise:

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

Med popularitet mener jeg ikke innholdet, men et eksempel på strukturen. La oss si at her må du skrive ut maksimums- og minimumsverdiene til bare "pris"-tastene.

Det første du trenger i dette tilfellet er å få en ny matrise med kun disse dataene:

$numbers = array_column($my_array, "pris");

Ekko min($tall); // Skriv ut 5 echo max($numbers); // Print 50

Dette fullfører arbeidet med arrays i PHP. Hvis strukturen til matrisen din plutselig er annerledes og du ikke vet hvordan du skal behandle den, spør det aktuelle spørsmålet i kommentarene, jeg vil prøve å hjelpe deg.

Finne den største og minste verdien av en endimensjonal matrise i JavaScript

I motsetning til PHP, er typen arrays i JavaScript mye enklere, og en enkel endimensjonal array vil se slik ut:

Var my_array = ;

Ingen indekser er angitt her. For å finne maksimums- og minimumsverdiene i denne matrisen, vil vi skrive to enkle funksjoner:

Funksjon arrayMax(array) ( return array.reduce(function(a, b) ( return Math.max(a, b); )); ) function arrayMin(array) ( return array.reduce(function(a, b) ( return Math.min(a, b); )); )

som brukes til å finne verdiene vi trenger. Bruken er også enkel:

Alert(arrayMax(my_array)); // Skriv ut 74 alert(arrayMin(my_array)); // Skriv ut 2

I dette tilfellet vil tallene "2" og "74" vises på skjermen som minimums- og maksimumsverdier for matrisen.

Finne den største og minste verdien av en flerdimensjonal matrise i JavaScript

Flerdimensjonale arrays i JavaScript er like enkle, og de ser slik ut:

Var my_array = [ , , ];

La oss prøve å finne maksimum og minimum her. Til å begynne med vil vi skrive en funksjon som vi, i henhold til skjemaet vi allerede er kjent med, vil representere denne matrisen som endimensjonal:

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

Og bruke objektet " Matte"vi får verdiene vi trenger:

Var min = Math.min.apply(null, out_array); // Få 2 var max = Math.max.apply(null, out_array); // Få 74 alert(maks); // Skriv ut 74 på skjermen

Faktisk, i stedet for objektet " Matte"Du kan bruke funksjonene våre som brukes i versjonen med en endimensjonal array, men slik at du forstår at ethvert problem kan løses på flere måter - her har jeg gitt en litt annen løsning.

Vel, som tradisjon - en liten bonus. La oss vurdere en annen flerdimensjonal matrise med følgende struktur:

Var my_array = [["One", "2018-03-19", 5], ["To", "2018-03-19", 50], ["Three", "2018-03-19", 25 ], ];

Som vi kan se, er de numeriske verdiene i hver matrise på tredjeplass. La oss skrive litt kode og få de tilsvarende verdiene fra bare disse dataene:

Var min = +uendelig; var max = -Uendelig; my_array.forEach(function(item) ( if(+item< min) { min =+ item; // Ищем минимальное значение } }); my_array.forEach(function(item) { if(+item >max) ( max =+ element; // Ser etter maksimumsverdien ) )); alert(min+" "+maks); // Vis resultatet på skjermen

Det er alt. Ikke glem å støtte prosjektet. Mange interessante ting venter på deg fremover!

Jeg har en matrise i dette formatet:

Matrise ( => Matrise ( => 117 => Nettverk => 16) => Matrise ( => 188 => FTP => 23) => Matrise ( => 189 => Internett => 48))

Er det en god måte å få min- og maksverdiene for "telling"? Jeg kunne gjøre dette ved å bruke flere løkker, men jeg tenkte at det kunne være en bedre måte.

I motsetning til andre, kan du ikke bruke min() / max()-funksjonene for dette problemet, siden disse funksjonene ikke forstår arrayene med data (array) som sendes til dem. Disse funksjonene fungerer bare for skalare array-elementer.

START BILDE

Grunnen til at bruk av min() og max() ser ut til å gi det riktige svaret er fordi arrays er type-casting til heltall, som er udefinert oppførsel:

Konverteringsatferden til heltall er ikke definert for andre typer. Ikke stol på observert atferd da den kan endres uten forvarsel.

Påstanden min ovenfor om typestøping var feil. Egentlig fungerer min() og max() med arrays, men ikke på den måten OP trenger dem for å fungere. Når du bruker min() og max() med flere matriser eller en matrise med matriseelementer, sammenligner du elementer element for element fra venstre mot høyre:

$val = min(matrise(2, 4, 8), matrise(2, 5, 1)); // array(2, 4, 8) /* * første element sammenlignet med første element: 2 == 2 * andre element sammenlignet med andre element: 4< 5 * first array is considered the min and is returned */

Oversatt til problemet viser OP hvorfor direkte bruk av min() og max() ser ut til å gi riktig resultat. De første elementene i matrisen er id , så min() og max() sammenligner dem først, forresten, noe som fører til riktig resultat, fordi den laveste IDen er den som har lavest antall og den høyeste IDen er den ene som har det høyeste antallet.

AVSLUTT EDIT

Den riktige måten er å bruke en løkke.

$a = array(array("id" => 117, "name" => "Nettverk", "count" => 16), array("id" => 188, "name" => "FTP", " count" => 23), array("id" => 189, "name" => "Internett", "count" => 48)); $min = PHP_INT_MAX; $maks = 0; foreach ($a som $i) ( $min = min($min, $i["count"]); $max = max($max, $i["count"]); )

Du kan bruke funksjonene max() og min().

Hva gjorde du med flere løkker? En er nok :)

  1. Få det første elementet ved å telle antallet av både $min og maks
  2. iterer over resten, sammenlign tellingen med hver $min og $max, hvis mindre/større tilordne en ny telleverdi

Du kan bruke maks/min-funksjonene da de vil returnere en matrise som inneholder maksimum/minimum for hver indeks. Eksemplet ditt skal returnere array(189, "Nettverk", 48) for maks. Du kan deretter hente poengsummen fra denne matrisen.

Å oppdatere dette fungerer ikke som jeg utelukket. Mansideeksemplet er misvisende og eksemplet gir riktig resultat ved å bruke maks, men det er bare en tilfeldighet.

Det ser ut til at du ikke kan bruke max() på en 2D-matrise. Den returnerer bare den største matrisen, i stedet for max() av ​​hver indeks (som angitt i flere svar).

$count = array(); foreach($arr som $_arr) ( $count = $_arr["count"]; ) var_dump(max($count), min($count));

Finnes det tilsvarende innebygd funksjon for dette? (selv uten mulighet testing)

/** * henter en kolonne fra en 2D-array med et valgfritt valg over en annen kolonne * * @param $ aArray for å hente fra * @param $ aColName navn på kolonnen som skal hentes, f.eks. "O_NAME" * @param $aColTest (valgfritt) kolonnenavn for å kjøre testen, f.eks. "O_ID" * @param $aTest (valgfritt) streng for testeks. ">=10", "== "". $Toto. "" " * @return 1D-array med bare kolonnen ekstrahert * @access public * / funksjon extractColFromArray ($aArray, $aColName, $aColTest = "", $ aTest = "") ( $mRes = array()); foreach ($aArray som $row) ( if (($aColTest == "") || (eval("return". $row[$aColTest]. $ aTest. ";"))) ( $ mRes = $ rad [ $ aColName]; ) ) returner $ mRes; ) // extractColFromArray