【问题标题】:php get the nearest value to 1php获取最接近1的值
【发布时间】:2022-01-25 13:41:04
【问题描述】:
$result_id[][] = "";
$result_total[][] = "";
foreach ($user as $key) {
    $a = 0;
    foreach ($drama as $row) {
        if ($w_average[$key['userid']][$row['id']] > 0) {
            if ($w_average[$key['userid']][$row['id']] < 1) {
                $result_id[$key['userid']][$a] = $row['id'];
                $result_total[$key['userid']][$a] = $w_average[$key['userid']][$row['id']];
                $a++;
            }
        }
    }
}

我想得到 w_average 的正值和最接近 1 的值。

w_average 是 0.25 和 0.33,但我的源代码的输出是 0.25

如何解决?谢谢

【问题讨论】:

  • 使用abs($value - 1)获取一个值与1的距离。
  • 您的代码在哪里检查一个值是否比另一个值更接近 1?

标签: php if-statement


【解决方案1】:

您可以使用abs($number - $nearest) 获取该值与您想要的数字的距离

function closest(array $numbers, $nearest = 1) {
  $max = PHP_INT_MAX;
  foreach($numbers as $number) {
    $distance = abs($number - $nearest);
    if($distance < $max) {
      $max = $distance;
      $nearest = $number;
    }
  }
  return $nearest;
}

var_dump(closest([0.25, 0.33]));

// Result 0.33

【讨论】:

  • 我的值类型是一个布尔值(浮点数),你知道我怎么把它放在foreach上吗?...
【解决方案2】:

您确定该值是作为数字而不是作为字符串传递的吗?

$w_average = [0.25, 0.33, 1.21, -0.4];
foreach ($w_average as $row) {
    if($row < 1 && $row > 0 ) {
        echo "W_average = ".$row." -> Ok";
    } else {
        echo "W_average = ".$row." -> NO";
    }
}

输出:
W_average = 0.25 -> 好的
W_average = 0.33 -> 好的
W_average = 1.21 -> NO
W_average = -0.4 -> NO

例子:

$w_average = [0.25, 0.33, 1.21, -0.4];
$near = 0; 
foreach ($w_average as $row) {
   if($row < 1 && $row > $near) {
       $near = $row;
   } 
}
echo $near;

输出:0.33

【讨论】:

  • 如何找到最接近 1 的值?它所做的只是判断一个数字是否介于 0 和 1 之间。
  • @barmar $w_average = [0.25, 0.33, 1.21, -0.4]; $near = 0; foreach ($w_average as $row) { if($row $near) { $near = $row; } } 回声 $near;
  • 把它放在答案中,而不是评论中。
猜你喜欢
  • 2020-03-20
  • 1970-01-01
  • 2020-11-18
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
相关资源
最近更新 更多