gpt4 book ai didi

php - 比较两个数组中具有匹配键的数值(使用阈值/容差)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:50:48 24 4
gpt4 key购买 nike

我需要将数据库值与发布值进行比较。如果发布值(十进制价格)在 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 ( Compare decimals in PHP) 和 array_udiff:

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"));

给出正确的结果:Array ( [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 ) 

Key [22] => 20.01 已列出,但它在阈值内,因此不应出现在结果集中。我想我没有完全理解 array_udiff。谢谢。

最佳答案

我不认为 udiff 会像您认为的那样工作。如果您打印 v1 和 v2,它将为您提供以下内容:

v1: 20.01 v2: 9.98
v1: 2.55 v2: 20.01
v1: 20 v2: 10
v1: 3.55 v2: 20
v1: 9.98 v2: 10
v1: 9.98 v2: 20.01
v1: 20.01 v2: 20
v1: 20.01 v2: 2.55
v1: 2.55 v2: 3.55

它进行的比较比您想象的要多。

您可能需要一段看起来像这样的代码:

function compare_arrays($array1, $array2){
$result = array();
foreach($array1 as $value => $outcome){
if(epsilon_compare($array1[$value], $array2[$value])){
$result[$value] = $array2[$value];
}
}
return $result;
}

关于php - 比较两个数组中具有匹配键的数值(使用阈值/容差),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com