求一个php最近的最小值算法

<?php
$a = array(
            array('userid'=>3,'val'=>9.5),
            array('userid'=>1,'val'=>9),
            array('userid'=>2,'val'=>9.5),
            array('userid'=>5,'val'=>9.5),
            array('userid'=>8,'val'=>9.5)
            
);
//print_r($a);
$b = 9.5;
foreach ($a as $value) {
    if($value['val'] <= $b)
    {
        $userid = $value['userid'];
        break;
    }
}
echo $userid;
?>

如果给出一个 val= 0.95,

返回数组中最近的一个比 val= 0.95 小的userid,是0.9。

如果一个都没有比0.95小的,那么返回,第一个val=0.95,对应的userid。

大概意思是:总是取数组从头开始最近的 <= 0.95的,userid。,如果有相等,那么取后面那个看看是不是<9.5,如果是,就是9,对应的userid。

阅读 1.8k
2 个回答
$a = array(
            array('userid'=>3,'val'=>0.95),
            array('userid'=>1,'val'=>0.95),
            array('userid'=>2,'val'=>0.95),
            array('userid'=>5,'val'=>0.95),
            array('userid'=>8,'val'=>0.95)
            
);
$x = 0.9;
$count=count($a);
$b=[];
foreach($a as $v){
  $arr2['val']   = abs($x-$v['val']);
    $arr2['userid'] = $v['userid'];
    $b[]=$arr2;
  //print_r ($v['val']);
}
$min = min($b);
print_r($min);

还差点,就对了。

$a = [
        ['userid' => 3, 'val' => 0.95],
        ['userid' => 1, 'val' => 0.95],
        ['userid' => 2, 'val' => 0.9],
        ['userid' => 5, 'val' => 0.95],
        ['userid' => 8, 'val' => 0.95]
    ];
    $x = 0.9;
    $b1 = [];
    $b2 = [];
    foreach($a as $v) {
        if($v['val'] < $x && !count($b1)) {
            $b1 = $v;
        }
        if($v['val'] === $x && !count($b2)) {
            $b2 = $v;
        }
    }
    $b = $b1 ?: $b2;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题