PHP - 从整数数组中获取最大可能的整数匹配

时间:2015-12-18 11:03:12

标签: php math

我有一个整数数组:

$intArr = [2, 4, 8, 16];

假设$ inputInt为8,我需要来自该数组的最大整数匹配,当然应该返回8。

以下功能需要修改:

function getBiggestMatch($intputInt) {
    $intArr = [2, 4, 8, 16];

    foreach($intArr as $key => $value) {
        if($key < $intputInt) {
            $biggestMatch = $value;
        }
    }

    return $biggestMatch;
}

$biggestMatch = getBiggestMatch(8); // should return 8, but returns 2 now

此函数将返回2,因为这是第一次$ key&lt; $ intInput。所需的结果必须是来自$ intArr。

的8

2 个答案:

答案 0 :(得分:0)

比较$value,而不是$key。这将返回8.

<?php
function getBiggestMatch($intputInt) {
    $intArr = [2, 4, 8, 16];

    foreach($intArr as $key => $value) {
        if($value <= $intputInt) {
            $biggestMatch = $value;
        }
    }

    return $biggestMatch;
}

echo getBiggestMatch(8); // should return 8, but returns 2 now
?>

答案 1 :(得分:0)

您需要进行双重检查,因为如果您的数组没有订单,则会返回最后一个次要值:

function getBiggestMatch($intputInt) {

    $intArr = [4, 8, 2, 16];

    $maxInt = false;

    foreach($intArr as $key => $value) {

        if($intputInt >= $value && $maxInt < $value) $maxInt = $value;

    }

    return $maxInt;
}

echo getBiggestMatch(12);

ideone code

修改

按照@ Rizier123的建议,该功能需要找到最大最接近的值(我原来的问题我不太了解),这可能是一个可能的解决方案:

function getBiggestMatch($intputInt) {

    $intArr = [4, 8, 2, 16];

    $maxInt = false;
    $diference = 0;

    foreach($intArr as $key => $value) {

        if( $diference == 0 || ($diference > 0 && abs($intputInt - $value) < $diference)  ) {

            $maxInt = $value;

            $diference = abs($intputInt - $value);

        }

    }

    return $maxInt;
}

echo getBiggestMatch(15);

ideone code