我有:
$current_price = 100;
$array_price = array(10,20,30,40,50,60,70,80,90, 140,150)
我想将当前价格与数组中的价格进行比较,找到最小的吸收差,并从与当前价格中具有最小差的数组中保存价格
$diff = '';
$diff_array=array();
foreach ($array_price as $value) {
$diff = abs($current_pric - $value);
$diff_array[] = $diff;
}
echo(min($diff_array) . "<br>");
在这种情况下,我可以找到最小的差异,但是如何从具有最小差异的阵列中节省价格呢?
答案 0 :(得分:0)
我对这个问题的处理有些不同。 只要保存变量的值(如果它小于保存的变量的值),并保留数组的索引,就可以得到数组的索引和值。
答案 1 :(得分:0)
您不需要$diff_array
。只需遍历阵列测试,即可检查电流差是否小于到目前为止所看到的最小差。如果是这样,请将当前差异和当前价格保存在变量中。
$smallest_element = $array_price[0];
$smallest_diff = abs($smallest_element - $current_price);
for ($i = 1; $i < count($array_price); $i++) {
if (abs($array_price[$i] - $current_price) < $smallest_diff) {
$smallest_diff = abs($array_price[$i] - $current_price);
$smallest_element = $array_price[$i];
}
}
echo "Closest price is $smallest_element\n";
答案 2 :(得分:0)
您可以通过将array_walk
与abs
一起使用来解决此问题,然后在差值数组中使用min
和array_search
来检索最小差的最小数组元素
$b = [];
array_walk($array_price, function(&$v,&$k) use ($current_price, &$b){
$b[$v] = abs($current_price - $v);
});
echo 'Minimam array element is : '.array_search(min($b), $b).', which has difference : '.min($b);
实际工作示例:https://3v4l.org/QasYM