foreach($array as $k => $v){ $diff[abs($v - $budget)] = $k; }
ksort($diff, SORT_NUMERIC);
$closest_key = current($diff);
var_dump($closest_key); // Product Name
var_dump($array[$closest_key]); // Product Cost
印刷:
字符串(12)“产品名称2”
整数(10)
或者作为一个函数:
function closest($array, $price)
{
foreach($array as $k => $v){ $diff[abs($v - $price)] = $k; }
ksort($diff, SORT_NUMERIC);
$closest_key = current($diff);
return array($closest_key, $array[$closest_key]);
}
print_r(closest($array, $budget));
印刷:
大批
(
[0] => productname2 // 产品名称
[1] => 10 // 产品价格
)
两种格式都只包含三个步骤:
- 计算产品成本与预算之间的差额
- 对这些进行排序
- 从排序后的数组中取出第一个元素(价格最接近预算的元素)。
编辑:如果您不关心除了最接近的单个产品之外的任何东西,那么排序是矫枉过正的,一个简单的min()
功能(如 Emil 使用)会快得多。例如:
function closest($array, $price)
{
foreach($array as $k => $v){ $diff[abs($v - $price)] = $k; }
$closest_key = $diff[min(array_keys($diff))];
return array($closest_key, $array[$closest_key]);
}