我需要将数据库的值与提交的数值进行比较。如果提交的数值(十进制价格)在2美分阈值内,则认为值相等。结果是一个包含“真实”差异的数组。数组是一致的:具有相同数量的值和相同的键。
$db_values = array( "21" => 10.00, "22" => 20.00, "25" => 3.55);
$post_values = array( "21" => 9.98, "22" => 20.01, "25" => 2.55 );
我正在尝试将绝对值与我的容差值(epsilon)进行比较,使用方法是array_udiff(PHP中比较小数):
function epsilon_compare ($v1,$v2)
{
$epsilon = 0.02;
$diff = abs($v1 - $v2);
if ($diff <= $epsilon)
{
return 0;
//echo "numbers are equal";
} else {
return 1;
}
}
print_r(array_udiff($post_values, $db_values, "epsilon_compare"));
给出正确结果:数组([25] => 2.55)
但是当我使用不同的数组时,结果会出错,例如:
$db_values = array( "21" => 10.00, "22" => 20.00, "25" => 3.55);
$post_values = array( "21" => 8.00, "22" => 20.01, "25" => 2.55 );
在这种情况下,它给出:
Array ( [21] => 8 [22] => 20.01 [25] => 2.55 )
列表中列出了键 [22] => 20.01,但它在阈值范围内,因此不应该在结果集中。我认为我没有完全理解array_udiff方法。谢谢。