Autor Zpráva
Muff
Profil *
Zdravím,
s PHP začínám a řeším problém. Mám po explode pole s měnícími se různými čísly, někdy pouze kladná, jindy jen záporná, nebo oba případy, příklad:
$cisla = array(150, -20, 30.48, -6, 1.38, -9, 34, -48.56);

A teď bych potřeboval k proměnných $nejmensi a $nejvetsi přiradit nejmenší číslo (může být záporné i kladné) a největší číslo (může být záporné i kladné) z toho pole. Napadlo mě tyto čísla sečíst a vydělit počtem čísel, tím bych dostal aritmetický průměr a věděl, že existuje menší a větší číslo od tohoto průměru. Pak bych například cyklem toto pole prošel znova a porovnáváním hledal do mínusu a do plusu. Matnou představu mám, ovšem celé mi to připadne jako velice krkolomné řešení. Neexistuje jednodušší postup?
Budulinek
Profil
co třeba funkce min() a max()? Tady najdeš více
Radek9
Profil
Muff:
$cisla = array(150, -20, 30.48, -6, 1.38, -9, 34, -48.56);
sort($cisla);
$nejmensi = $cisla[0];
rsort($cisla);
$nejvetsi = $cisla[0];

Edit: Aha, Budulinek našel lepší řešení.
Muff
Profil *
Budulinek, Radek9: Až je mi normálně trapně jak jsem to chtěl řešit. :-) Díky.
AM_
Profil
Radek9:
Tfujtajbl, přes sort? A ještě k tomu ho voláš dvakrát, protože neumíš přečíst POSLEDNÍ prvek pole? pardon, ale tohle je prasárna.
Když už, tak:
sort($cisla);
$nejmensi = $cisla[0];
$nejvetsi = $cisla[count($cisla)-1];

Má to ještě jednu nevýhodu, je to zbytečně pomalé. Třídění zabere minimálně N*logN času, ale tenhle problém se dá zmáknout v čase N:
$nejmensi = $nejvetsi = $cisla[0];
foreach ($cisla as $cislo){
  if ($cislo < $nejmensi) $nejmensi = $cislo;
  if ($cislo > $nejvetsi) $nejvetsi = $cislo;
}

Až budeš prohledávat třeba 100 tisíc čísel, budeš za tohle zrychlení vděčný.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: