Какой самый простой способ получить соотношение в PHP нескольких чисел? - PullRequest
3 голосов
/ 10 августа 2010

Я адаптировал это из примера, который я нашел в сети ...

function ratio($a, $b) {
    $_a = $a;
    $_b = $b;

    while ($_b != 0) {

        $remainder = $_a % $_b;
        $_a = $_b;
        $_b = $remainder;   
    }

    $gcd = abs($_a);

    return ($a / $gcd)  . ':' . ($b / $gcd);

}

echo ratio(9, 3); // 3:1

Теперь я хочу использовать func_get_args() и возвращать отношения для нескольких чисел. Это похоже на рекурсивную проблему, и рекурсия выводит меня из себя (особенно когда мои решения бесконечный цикл)!

Как бы я изменил это, чтобы принять столько параметров, сколько я хотел?

Спасибо

1 Ответ

5 голосов
/ 10 августа 2010

1-й, попробуйте эту функцию gcd http://php.net/manual/en/function.gmp-gcd.php Или вы должны определить функцию gcd как

    function gcd($a, $b) {
        $_a = abs($a);
        $_b = abs($b);

        while ($_b != 0) {

            $remainder = $_a % $_b;
            $_a = $_b;
            $_b = $remainder;   
        }
        return $a;
    }

Затем измените функцию отношения

    function ratio()
    {
        $inputs = func_get_args();
        $c = func_num_args();
        if($c < 1)
            return ''; //empty input
        if($c == 1)
            return $inputs[0]; //only 1 input
        $gcd = gcd($input[0], $input[1]); //find gcd of inputs
        for($i = 2; $i < $c; $i++) 
            $gcd = gcd($gcd, $input[$i]);
        $var = $input[0] / $gcd; //init output
        for($i = 1; $i < $c; $i++)
            $var .= ':' . ($input[$i] / $gcd); //calc ratio
        return $var; 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...