30秒的PHP代碼片段(2)數學 - Math

本文來自GitHub開源項目

點我跳轉

30秒的PHP代碼片段

clipboard.png

精選的有用PHP片段集合,您可以在30秒或更短的時間內理解這些片段。

數學函數

average

返回兩個或多個數字的平均值。

function average(...$items)
{
    $count = count($items);
    
    return $count === 0 ? 0 : array_sum($items) / $count;
}

Examples

average(1, 2, 3); // 2

factorial(階乘)

計算一個數的階乘。

function factorial($n)
{
    if ($n <= 1) {
        return 1;
    }

    return $n * factorial($n - 1);
}

Examples

factorial(6); // 720

fibonacci(斐波那契數列)

生成包含斐波那契數列的數組,直到第n項。

function fibonacci($n)
{
    $sequence = [0, 1];

    for ($i = 2; $i < $n; $i++) {
        $sequence[$i] = $sequence[$i-1] + $sequence[$i-2];
    }

    return $sequence;
}

Examples

fibonacci(6); // [0, 1, 1, 2, 3, 5]

GCD(最大公約數)

計算兩個或多個數之間的最大公約數。

function gcd(...$numbers)
{
    if (count($numbers) > 2) {
        return array_reduce($numbers, 'gcd');
    }

    $r = $numbers[0] % $numbers[1];
    return $r === 0 ? abs($numbers[1]) : gcd($numbers[1], $r);
}

Examples

gcd(8, 36); // 4
gcd(12, 8, 32); // 4

isEven

如果給定的數字是偶數,則返回true,否則返回false

function isEven($number)
{
    return ($number % 2) === 0;
}

Examples

isEven(4); // true

isPrime

檢查提供的整數是否是素數。

function isPrime($number)
{
    $boundary = floor(sqrt($number));
    for ($i = 2; $i <= $boundary; $i++) {
        if ($number % $i === 0) {
            return false;
        }
    }

    return $number >= 2;
}

Examples

isPrime(3); // true

lcm

返回兩個或多個數字的最小公倍數。

function lcm(...$numbers)
{
    $ans = $numbers[0];
    for ($i = 1, $max = count($numbers); $i < $max; $i++) {
        $ans = (($numbers[$i] * $ans) / gcd($numbers[$i], $ans));
    }

    return $ans;
}

Examples

lcm(12, 7); // 84
lcm(1, 3, 4, 5); // 60

median

返回數字數組的中間值。

function median($numbers)
{
    sort($numbers);
    $totalNumbers = count($numbers);
    $mid = floor($totalNumbers / 2);

    return ($totalNumbers % 2) === 0 ? ($numbers[$mid - 1] + $numbers[$mid]) / 2 : $numbers[$mid];
}

Examples

median([1, 3, 3, 6, 7, 8, 9]); // 6
median([1, 2, 3, 6, 7, 9]); // 4.5

maxN

從提供的數組中返回最大的數的個數。

function maxN($numbers)
{
    $maxValue = max($numbers);
    $maxValueArray = array_filter($numbers, function ($value) use ($maxValue) {
        return $maxValue === $value;
    });

    return count($maxValueArray);
}

Examples

maxN([1, 2, 3, 4, 5, 5]); // 2
maxN([1, 2, 3, 4, 5]); // 1

minN

從提供的數組中返回最小的數的個數。

function minN($numbers)
{
    $minValue = min($numbers);
    $minValueArray = array_filter($numbers, function ($value) use ($minValue) {
        return $minValue === $value;
    });

    return count($minValueArray);
}

Examples

minN([1, 1, 2, 3, 4, 5, 5]); // 2
minN([1, 2, 3, 4, 5]); // 1

approximatelyEqual(約等於)

檢查兩個數字是否近似相等。使用abs()將兩個值的絕對值與進行比較。省略第三個參數,以便使用默認值0.001。

function approximatelyEqual($number1, $number2, $epsilon = 0.001)
{
    return abs($number1 - $number2) < $epsilon;
}

Examples

approximatelyEqual(10.0, 10.00001); // true
approximatelyEqual(10.0, 10.01); // false

clampNumber

num放在邊界值ab指定的包含範圍內。如果num在該範圍內,則返回num。否則,返回該範圍內最近的數字。

function clampNumber($num, $a, $b)
{
    return max(min($num, max($a, $b)), min($a, $b));
}

Examples

clampNumber(2, 3, 5); // 3
clampNumber(1, -1, -5); // -1

相關文章:

30秒的PHP代碼片段(1)數組 - Array

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章