如何检查数组值是否几乎相同

时间:2015-12-08 10:34:06

标签: php arrays algorithm

我有一个包含七个数字的数组:

array(159.60, 159.60, 159.60, 159.60, 159.60, 199.50, 199.50);
array(395.68, 395.68, 395.68, 395.68, 395.68, 395.68, 395.68);
array(531.18, 531.18, 531.18, 531.19, 531.18, 531.18, 531.18);

我需要检查所有值是否相同,只有一个扭曲:有时值不同因为四舍五入错误(参见第三个数组中的第四个值)。我希望他们被认为是相同的。

检查所有数组值是否在容差值内相同的最佳方法是什么,例如0.1

2 个答案:

答案 0 :(得分:2)

对于每个数组,我们都可以找到max& min值并检查它是否大于0或@zerkms建议的值。

$tests = array(
    array(159.60, 159.60, 159.60, 159.60, 159.60, 199.50, 199.50), 
    array(395.68, 395.68, 395.68, 395.68, 395.68, 395.68, 395.68), 
    array(531.18, 531.18, 531.18, 531.19, 531.18, 531.18, 531.18)
);
foreach ($tests as $i => $test) {
    $result = abs(max($test) - min($test)) <= 0.1;
    var_dump($result);
}

<强>输出

bool(false)
bool(true)
bool(true)

CODE

答案 1 :(得分:-1)

您可以编写一个非常简单的循环来检查:

function withinTolerance($array,$tolerance){
    $initialValue = $array[0]; //Set the initial value
    foreach ($array as $num){
        //Loop the array, and if the value is outside the tolerance, return false.
        if ($num < $initialValue - $tolerance || $num > $initialValue + $tolerance) return false;
    }

    return true;
}