Abrunden nach Zahlen aus Array

  • Hey

    ich möchte eine Zahl abrunden. Jedoch soll sie auf die nächstkleinste Zahl aus einem Array abgerundet werden. Ich denke mal dafür gibt es eine Funktion von PHP, jedoch brauchte ich sowas bisher nicht und deswegen kenne ich die nicht.

    Beispiel:

    PHP
    $array = array(1,2,3,4,10,50.2345, 200.345);
    $zahl1 = 1.3;
    $zahl2 = 30;

    Jetzt soll aus $zahl1 eine 1 werden und aus $zahl2 10.
    Würde es sogar noch besser finden wenn es so lösbar wäre:


    und ich als ausgabe wert für zahl1 a bekomme und für zahl2 e.

    Ich hoffe jemand kennt dafür eine Funktion und wenn sogar 2. lösbar ist, umsobesser =)
    Danke

    Gruß
    WWKiller

  • Ich wüßte nicht, dass es dafür eine Funktion gibt. Aber ist doch trivial eben selber zu schreiben.

    PHP
    function myRound($number,$array) {
        $result = null;
        foreach($array as $k=>$v) {
            if($v > $number) {
                break;
            }
            $result = $v; //bzw =$k für Version 2.
        }
        return $result;
    }


    Falls dein Vergleichsarray nicht der Größe nach sortiert ist musst du halt noch anpassen.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • PHP
    function floor_in_array($number, $arr)
    {
        $arr_s = sort($arr);
        $num = count($arr_s);
        for($i = 1; $i < $num; $i++)
            if($arr_s[$i] > $number;
                return $arr_s[$i-1];
        return $arr_s[$num-1];
    }


    Ungetestet, aber sollte hinhauen.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • ok danke euch

    ich hab mir eben noch mal gedanken gemacht und bevor ihr es gepostet habt, habe ich es so gemacht:
    Einfach den einen Wert auch in das Array eintragen, sortieren und danach suchen und ein key nach unten gehen.
    Jedoch denke ich, dass euers schneller ist als meins.

    Danke =)