Jump to content
Sign in to follow this  
Bobi92

PHP min i max funkcija

Recommended Posts

Potrebna mi je pomoc za izvlacenje minimalne i maksimalne vrednosti u nizu, ali ne ovako:

 

$arr_brojevi=array("10", "20", "30", "40", "50");

echo max($arr_brojevi);

 

Treba da odradim malo slozenije, i postupno...

Share this post


Link to post
Share on other sites

Dobro došao na DZ. :)

 

<?php

// inicijalizacija niza
$arr_brojevi = array(10, 1, 5, 20, 18, 30, 65, 40, 50);

// pretpostavka da su i najmanji i najveci broj prvi element niza
$min_broj = intval($arr_brojevi[0]);
$max_broj = $min_broj;

// petlja u kojoj provjeravas svaki element niza
foreach ($arr_brojevi as $broj) {

    // prevencija u slucaju da je neki od elemenata niza string a ne broj
    // kako si naveo u postavci zadatka "10", "20", "30", ...
    $broj = intval($broj);

    // ako je tekuci broj (element niza) manji od trenutno najmanjeg, zapamti ga kao trenutno najmanji
    if ($broj < $min_broj) {
        $min_broj = $broj;
    } 

    // ili ako je veci od trenutno najveceg, zapamti ga kao trenutno najveci
    elseif ($broj > $max_broj) {
        $max_broj = $broj;
    }

}

// prikazi rezultat
echo "Najmanji broj u nizu je {$min_broj}, a najveci je {$max_broj}.";

 

Ovo je moguće razraditi još malo na način da prikažeš grešku u slučaju da zadati niz ne sadrži brojeve ili je prazan, i eventualno prilagoditi kod za neku svoju min/max funkciju.

Share this post


Link to post
Share on other sites

Zadatak mi nije potpun, Trebam ovako da uradim:

 

function max_value() {

 

}

max_value();

 

function min_value() {

 

}

min_value();

 

Sve nacine sam probao, ali mi tesko polazi za rukom...

 

Treba mi da provem bilo koji niz za tom funkcijom, tj. samo brojeve...

Share this post


Link to post
Share on other sites

Izgleda da je nepremostiv problem onaj kod "razbiti" na dvije funkcije. :)

Kao razradu teme, mozes iskoristiti funkcije is_​array() i count() da provjeris da li je zaista niz prosledjen kao parametar funkciji, i da li je isti prazan, kao i is_numeric() sa kojim ces provjeriti da li je odredjeni element niza numericka vrijednost. Kostur funkcije za maksimalnu vrijednost izgledao bi ovakvo:

 

function max_value($arr) {

    $max_num = intval($arr[0]);
    
    foreach ($arr as $num) {
        $num = intval($num);
        if ($num > $max_num) {
            $max_num = $num;
        }
    } 

    return $max_num;
}

Share this post


Link to post
Share on other sites

Evo jos jedna razrada teme. Bilo mi dosadno veceras pa sam se poigrao i pokusao da odradim pametniju verziju funkcije max_value(). Napisano je iz glave i bez provjere ali moglo bi se desiti da fercera. :)

 

 

function max_value($arr) {

    $max_num = FALSE;

    if (is_array($arr) && count($arr) > 0) {

        foreach ($arr as $val) {
            if (is_numeric($val)) {

                // vidi napomenu
                if ($max_num === FALSE || $val > $max_num) {
                    $max_num = $val;
                }

            }
        } 
    }

    return $max_num;
}

 

Napomena za glavnu provjeru u foreach petlji i rezultat funkcije. Ako je trenutna vrijednost $max_num FALSE znaci da do sada nisi imao numerickih elemenata u nizu, pa je logicno da prvi numerik postane i trenutno najveca vrijednost. Drugi uslov je klasika, odnosno ako je trenutni element veci od trenutno maksimalnog, onda on postoje novi maksimalni. Petlja 'vrti' sve elemente niza $arr, a provjera se vrsi samo za numericke vrijednosti. Kao rezultat funkcije imas maksimalnu vrijednost u slucaju da je niz imao barem jedan numericki element, ili FALSE u slucajevima: da je niz prazan, da ne sadrzi nijedan numericki element, ili da promjenjiva $arr prosledjena funkciji nije niz.

 

Na ovakav nacin sasvim je legitimno da funkciji kao parametar proslijedis nizove koji ne sadrze iskljucivo numericke elemente. Na primjer: array("test", 10, 1, 5, "x" , 30, 65, 50), array("klm", "nop", "qwerty"), array(), itd.

Share this post


Link to post
Share on other sites

Cisto malo napomena... Koliko sam ja upoznat, array funkcije u php-u su prilicno spore. Spore je relativan pojam, ali resursno je vjerovatno efikasnije odraditi foreach petlju, nego sortirati pomocu array funkcije. I sam cesto pisem uredniji kod na racun performansi (npr koristim switch-case petlje).

Zavisi i od funkcije do funkcije, ali u vecini slucajeva je brze naokolo nego poprijeko.

Share this post


Link to post
Share on other sites

Evo kako sam odradio min i max funkciju...

 

function min_max_function ($niz){

$max = $niz[0];

$min = $niz[0];

 

for ($i = 0; $i < count($niz); $i++){

if($niz[$i] > $max) {

$max = $niz[$i];

}elseif ($niz[$i] < $min) {

$min = $niz[$i];

}

}

return $max . $min;

}

 

:D :D

Share this post


Link to post
Share on other sites
Cisto malo napomena... Koliko sam ja upoznat, array funkcije u php-u su prilicno spore. Spore je relativan pojam, ali resursno je vjerovatno efikasnije odraditi foreach petlju, nego sortirati pomocu array funkcije. I sam cesto pisem uredniji kod na racun performansi (npr koristim switch-case petlje).

Zavisi i od funkcije do funkcije, ali u vecini slucajeva je brze naokolo nego poprijeko.

 

 

uh, ne :D

 

Mozda pre 10+ godina.

 

 

 

2)

 

Min/Max funkcike postoje od PHP4 :(

 

http://php.net/manual/en/function.min.php

http://php.net/manual/en/function.max.php

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...