简体   繁体   中英

php get the nearest value to 1

$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++;
            }
        }
    }
}

i wanna get the positive value of w_average and the nearest value to 1.

the w_average are 0.25 and 0.33 but the output of my source code is 0.25

how to fix it? thanks

are you sure that the value is pass as number, not as string?

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

Output:
W_average = 0.25 -> Ok
W_average = 0.33 -> Ok
W_average = 1.21 -> NO
W_average = -0.4 -> NO

Example:

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

Output: 0.33

You may use abs($number - $nearest) to get the distance of the value from your desire number

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM