将一个数字与数组中的数字进行比较以找到最小的差异

时间:2019-07-10 23:39:15

标签: php arrays

我有:

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

在这种情况下,我可以找到最小的差异,但是如何从具有最小差异的阵列中节省价格呢?

3 个答案:

答案 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_walkabs一起使用来解决此问题,然后在差值数组中使用minarray_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