Php kupata thamani ya juu katika safu. PHP Pata maadili ya chini na ya juu zaidi katika safu ya ushirika ya pande mbili. Kupata thamani kubwa zaidi na ndogo zaidi ya safu ya multidimensional katika JavaScript

Nina safu katika umbizo hili:

Safu ( => Safu ( => 117 => Mitandao => 16) => Safu ( => 188 => FTP => 23) => Safu ( => 189 => Mtandao => 48))

Kuna njia nzuri ya kupata viwango vya chini na vya juu vya "hesabu"? Ningeweza kufanya hivyo kwa kutumia vitanzi vingi, lakini nilidhani kunaweza kuwa na njia bora zaidi.

Tofauti na wengine, huwezi kutumia vitendakazi vya min() / max() kwa tatizo hili, kwa kuwa kazi hizi hazielewi safu za data (safu) zilizopitishwa kwao. Vitendo hivi hufanya kazi kwa vipengele vya safu ya scalar pekee.

ANZA PICHA

Sababu kwa nini kutumia min() na max() inaonekana kutoa jibu sahihi ni kwa sababu safu ni aina-kutupwa kwa nambari, ambayo ni tabia isiyofafanuliwa:

Tabia ya ubadilishaji hadi nambari kamili haijafafanuliwa kwa aina zingine. Usitegemee tabia yoyote inayozingatiwa kwani inaweza kubadilika bila onyo.

Taarifa yangu hapo juu kuhusu utumaji aina haikuwa sahihi. Kwa kweli min() na max() hufanya kazi na safu, lakini sio kwa njia ambayo OP inazihitaji kufanya kazi. Unapotumia min() na max() yenye safu nyingi au safu ya vipengee vya safu, linganisha kipengele kwa kipengele kutoka kushoto kwenda kulia:

$val = min(safu(2, 4, 8), safu(2, 5, 1)); // safu(2, 4, 8) /* * kipengele cha kwanza ikilinganishwa na kipengele cha kwanza: 2 == 2 * kipengele cha pili ikilinganishwa na kipengele cha pili: 4< 5 * first array is considered the min and is returned */

Ikitafsiriwa kuwa shida, OP inaonyesha kwa nini kutumia moja kwa moja min() na max() inaonekana kutoa matokeo sahihi. Vipengee vya kwanza vya safu ni id , kwa hivyo min() na max() huvilinganisha kwanza, kwa njia, na kusababisha matokeo sahihi, kwa sababu kitambulisho cha chini kabisa ni kile ambacho kina hesabu ya chini na kitambulisho cha juu zaidi ndio. ambayo ina idadi kubwa zaidi.

MALIZA KUHARIRI

Njia sahihi ni kutumia kitanzi.

$a = safu("id" => 117, "name" => "Mtandao", "count" => 16), safu("id" => 188, "name" => "FTP", " count" => 23), safu("id" => 189, "jina" => "Mtandao", "hesabu" => 48)); $min = PHP_INT_MAX; $ max = 0; foreach ($a as $i) ($min = min($min, $i["count"]); $max = max($max, $i["count"]);)

Unaweza kutumia max() na min() kazi.

Ulifanya nini na vitanzi vingi? Moja inatosha :)

  1. Pata kipengele cha kwanza kwa kuhesabu hesabu ya $min na max
  2. rudia zaidi ya iliyosalia, linganisha hesabu na kila $min na $max, ikiwa chini/kubwa zaidi toa thamani mpya ya hesabu

Unaweza kutumia max/min chaguo za kukokotoa kwani zitarudisha safu iliyo na upeo/kiwango cha chini cha kila faharasa. Mfano wako unapaswa kurudisha safu(189, "Networking", 48) kwa max . Kisha unaweza kunyakua alama kutoka kwa safu hii.

Kusasisha hii haifanyi kazi kama nilivyokataza. Mfano wa ukurasa wa mtu ni wa kupotosha na mfano unatoa matokeo sahihi kwa kutumia max, lakini hiyo ni bahati mbaya tu.

Inaonekana huwezi kutumia max() kwenye safu ya 2D. Inarudisha tu safu kubwa zaidi, badala ya max() ya kila faharisi (kama ilivyoonyeshwa katika majibu kadhaa).

$hesabu = safu(); foreach($arr as $_arr) ( $count = $_arr["count"]; ) var_dump(max($count), min($count));

Je, kuna sawa iliyojengwa ndani kazi kwa hili? (hata bila uwezekano kupima)

/** * hurejesha safu kutoka kwa safu ya 2D iliyo na chaguo la hiari juu ya safu wima nyingine * * @param $ aArray ili kuepua kutoka kwa * @param $ aColName jina la safu wima ya kurejesha, k.m. "O_NAME" * @param $aColTest (si lazima) jina la safu wima ili kufanya jaribio, k.m. "O_ID" * @param $aTest (ya hiari) mfuatano wa jaribio la zamani. ">=10", "== "". $Toto. "" " * @return 1D safu na safu wima iliyotolewa tu * @access public * / function extractColFromArray ($aArray, $aColName, $aColTest = "", $ aTest = "") ( $mRes = array()); foreach ($aArray kama $safu) ( ikiwa (($aColTest == "") || (eval("return". $row[$aColTest]. $ mtihani. ";"))) ( $ mRes = $ safu [ $ aColName]; ) ) rudisha $ mRes; ) // extractColFromArray

Mikusanyiko ni mojawapo ya njia rahisi zilizopangwa za kuhifadhi habari. Kila kipengele cha safu hiyo ina nafasi yake mwenyewe, ufunguo wake na thamani. Yaliyomo kwenye safu yanaweza kuwa tofauti, kama, kwa mfano, hifadhidata ya nambari, majina, au nambari rahisi za nambari. Tukizungumza juu ya nambari, tunaweza kukabiliwa na aina tofauti za kazi, kwa mfano, kutoa dhamana ya juu au ya chini. Leo tutazungumza juu ya jinsi hii inatatuliwa katika lugha tofauti za programu.

Kupata thamani kubwa na ndogo zaidi ya safu ya mwelekeo mmoja katika PHP

Safu zote hutofautiana katika muundo wao. Fikiria safu mbili rahisi za mwelekeo mmoja, moja ambayo haina funguo:

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

na moja inayofanana na ile ya awali, lakini yenye funguo:

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

Wacha tujaribu kuonyesha viwango vya juu na vya chini vya safu hii. Ili kufanya hivyo tutatumia kazi za kawaida " max"Na" min" kwa mtiririko huo:

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

Ikiwa tunazingatia kwa makini safu ya pili, basi kwa matokeo tunaweza kupata ufunguo wa maadili ya juu au ya chini.

Kutumia safu kama mfano

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

itaonekana kama hii:

$max = array_keys($my_array, max($my_array)); $max = $max;// Ufunguo wa thamani ya juu $min = array_keys($my_array, min($my_array)); $min = $min; // Ufunguo wa thamani ya chini echo $ max; // Chapisha matokeo ya thamani ya juu

Ipasavyo, ufunguo wa thamani ya juu ni "4", na thamani ya chini ni "6".

Kupata thamani kubwa na ndogo zaidi ya safu nyingi katika PHP

Safu za multidimensional zinatofautishwa na kuota kwao. Kwa mfano, safu ya pande mbili ingeonekana kama hii bila funguo:

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

Na, ipasavyo, na funguo fulani:

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

Katika kesi hii, kupata maadili ya juu na ya chini ni ngumu kidogo, lakini pia inawezekana.

Kwanza, ili kupata kiwango cha juu na cha chini hapa, tunabadilisha safu kuwa ya mwelekeo mmoja:

$out_array = safu(); foreach($my_array as $sub_array) ( $out_array = array_merge($out_array, $sub_array);)

Ubunifu hufanya kazi kwa chaguzi zote mbili hapo juu. Na kisha, kwa kufuata mfano wa safu ya mwelekeo mmoja, tutaonyesha data tunayohitaji:

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

Kama bonasi ndogo, nitatoa mfano wa safu nyingine maarufu ya pande mbili:

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

Kwa umaarufu simaanishi yaliyomo, lakini mfano wa muundo wake. Wacha tuseme kwamba hapa unahitaji kutoa viwango vya juu na vya chini vya funguo za "bei".

Jambo la kwanza unahitaji katika kesi hii ni kupata safu mpya na data hii tu:

$numbers = safu_safu($my_array, "bei");

Echo min(nambari za $); // Chapisha echo max 5 (nambari za $); // Chapisha 50

Hii inakamilisha kazi na safu katika PHP. Ikiwa ghafla muundo wa safu yako ni tofauti na hujui jinsi ya kusindika, uulize swali linalofaa katika maoni, nitajaribu kukusaidia.

Kupata thamani kubwa na ndogo zaidi ya safu ya mwelekeo mmoja katika JavaScript

Tofauti na PHP, aina ya safu katika JavaScript ni rahisi zaidi, na safu rahisi ya sura moja itaonekana kama hii:

Var my_array = ;

Hakuna faharasa zilizoonyeshwa hapa. Ili kupata maadili ya juu na ya chini katika safu hii, tutaandika kazi mbili rahisi zetu wenyewe:

Safu ya utendakaziMax(safu) ( safu ya kurudisha.punguza(kazi(a, b) ( rudisha Math.max(a, b); )); ) safu ya chaguo la kukokotoaMin(safu) ( safu ya kurudisha.punguza(kazi(a, b) ( rudisha Hisabati.min(a,b);));)

ambayo hutumiwa kupata maadili tunayohitaji. Matumizi pia ni rahisi:

Tahadhari(arrayMax(safu_yangu)); // Chapisha tahadhari ya 74(arrayMin(safu_yangu)); // Chapisha 2

Katika kesi hii, nambari "2" na "74" zitaonyeshwa kwenye skrini kama maadili ya chini na ya juu ya safu.

Kupata thamani kubwa zaidi na ndogo zaidi ya safu ya multidimensional katika JavaScript

Safu za multidimensional katika JavaScript ni rahisi tu, na zinaonekana kama hii:

Var my_array = [ , , ];

Wacha tujaribu kupata kiwango cha juu na cha chini hapa. Kuanza, tutaandika kazi ambayo, kulingana na mpango ambao tayari tumezoea, tutawakilisha safu hii kama ya sura moja:

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

Na kwa kutumia kitu " Hisabati"Tunapata maadili tunayohitaji:

Var min = Math.min.apply(null, out_array); // Pata 2 var max = Math.max.apply(null, out_array); // Pata arifa 74(max); // Chapisha 74 kwenye skrini

Kwa kweli, badala ya kitu " Hisabati"Unaweza kutumia kazi zetu zinazotumiwa katika toleo na safu ya sura moja, lakini ili uelewe kuwa shida yoyote inaweza kutatuliwa kwa njia kadhaa - hapa nimetoa suluhisho tofauti kidogo.

Kweli, kulingana na mila - bonasi ndogo. Wacha tuchunguze safu nyingine ya multidimensional na muundo ufuatao:

Var my_array = [["Moja", "2018-03-19", 5], ["Mbili", "2018-03-19", 50], ["Tatu", "2018-03-19", 25 ],];

Kama tunavyoona, nambari za nambari katika kila safu ziko katika nafasi ya tatu. Wacha tuandike nambari fulani na tupate maadili yanayolingana kutoka kwa data hii tu:

Var min = +Infinity; var max = -Infinity; my_array.forEach(function(item) ( if(+item< min) { min =+ item; // Ищем минимальное значение } }); my_array.forEach(function(item) { if(+item >max) ( max =+ bidhaa; // Inatafuta thamani ya juu ) )); tahadhari(min+" "+max); // Onyesha matokeo kwenye skrini

Ni hayo tu. Usisahau kuunga mkono mradi. Mambo mengi ya kuvutia yanakungoja mbeleni!

(PHP 4, PHP 5, PHP 7)

dakika - Hupata thamani ndogo zaidi

Maelezo

Ikiwa hoja moja tu itapitishwa - safu ya nambari, min() inarudisha mdogo wao. Ikiwa hoja ya kwanza ni nambari kamili au ya kuelea, basi lazima kuwe na angalau moja zaidi. Katika kesi hii kazi min() atarudisha mdogo wao.

Maoni:

Maadili ya aina tofauti yanalinganishwa kwa kutumia kanuni za kulinganisha za kawaida. Kwa mfano, kamba isiyo ya nambari ( kamba ) italinganishwa na nambari kamili ( nambari kamili ) kana kwamba ni sawa 0 , lakini mistari kadhaa ( kamba ) italinganishwa kwa alfabeti. Thamani ya kurudi itahifadhi aina asili ya kigeu, bila ubadilishaji.

Rudisha maadili

Kazi min() inarejesha thamani ya kigezo ambacho kinachukuliwa kuwa "ndogo zaidi" kulingana na sheria za ulinganisho za kawaida. Ikiwa maadili kadhaa ya aina tofauti ni sawa kwa kila mmoja (i.e. 0 Na "abc"), kisha wa kwanza atarudishwa.

Mifano

Mfano # 1 Mfano wa Matumizi min()

mwangwi dakika(2, 3, 1, 6, 7); // 1
echo min (safu(2 , 4 , 5 )); // 2

// Kamba "hello", ikilinganishwa na int, inachukuliwa kama 0
// Kwa kuwa maadili yote mawili ni sawa, mpangilio wa vigezo huamua matokeo
echo min(0, "hello"); // 0
echo min ("hello" , 0); // habari

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

// Wakati wa kulinganisha safu za urefu tofauti, min itarudisha moja fupi
$val = min (safu(2 , 2 , 2 ), safu(1 , 1 , 1 , 1 )); // safu(2, 2, 2)

// Safu nyingi za urefu sawa zinalinganishwa kutoka kushoto kwenda kulia
// kwa mfano huu: 2 == 2, lakini 4< 5
$val = min (safu(2 , 4 , 8 ), safu(2 , 5 , 1 )); // safu(2, 4, 8)

// Ikiwa safu na zisizo za safu zinalinganishwa, safu haitarejeshwa kamwe
// kwa kuwa safu zinazingatiwa kuwa kubwa kuliko maadili mengine yote
$val = min ("kamba" , safu(2, 5, 7), 42); //kamba

// Ikiwa hoja moja ni NULL au boolean, italinganishwa na nyingine
// kwa kutumia sheria ya UONGO< TRUE, учитывая остальные типы аргументов
// Katika mfano uliotolewa, -10 na 10 zinachukuliwa kuwa KWELI
$ val = min (- 10, FALSE, 10); // UONGO
$val = min (- 10, NULL, 10); // NULL

// kwa upande mwingine, 0 inachukuliwa kama FALSE, kwa hivyo ni "chini" kuliko TRUE
$val = min(0, TRUE); // 0
?>