在php数组中获取小于或等于数字的数字

在php数组中获取小于或等于数字的数字,php,arrays,Php,Arrays,PHP数组: $arr = array(0,15,60,120,2200); 我在函数中传递一个带有数组值的$number=12,然后返回值应该是0 我在函数中传递一个带有数组值的$number=15,然后返回值应该是15 我试着用下面的代码,但运气不好 <?php function get_less_value($arr, $number) { foreach ($arr as $val) { if ($val>= $number && $

PHP数组:

$arr = array(0,15,60,120,2200);
我在函数中传递一个带有数组值的
$number=12
,然后返回值应该是0

我在函数中传递一个带有数组值的
$number=15
,然后返回值应该是15

我试着用下面的代码,但运气不好

<?php
function get_less_value($arr, $number) {
    foreach ($arr as $val) {
        if ($val>= $number && $val < $number) return $val;
    }
    return end($arr);
}
echo get_less_value($arr, $number);

?>

阵列过滤器
是您要寻找的方法。我想有足够的方法做到这一点:)

$array=[0,15,60,120,2200];
$number=15;
$filtered=array\u filter($array,function($element)use($number){

return($elementIs
array\u filter
是您要寻找的方法。我想有足够的方法可以做到这一点:)

$array=[0,15,60,120,2200];
$number=15;
$filtered=array\u filter($array,function($element)use($number){

return($element这永远不会是真的:

if ($val>= $number && $val < $number)
如果($val>=$number&&$val<$number)

我会尝试:

$highest = 0;
foreach ($arr as $val) {
    if($val <= $number){
       if($val >= $highest){
           $highest= $val;
       }
    }
}
return $highest;
$highest=0;
外汇($arr作为$val){
如果($val=$highest){
$highest=$val;
}
}
}
返回$high;

这永远不会是真的:

if ($val>= $number && $val < $number)
如果($val>=$number&&$val<$number)

我会尝试:

$highest = 0;
foreach ($arr as $val) {
    if($val <= $number){
       if($val >= $highest){
           $highest= $val;
       }
    }
}
return $highest;
$highest=0;
外汇($arr作为$val){
如果($val=$highest){
$highest=$val;
}
}
}
返回$high;

如果数组排序正确,您可以从末尾搜索,只需找到不超过$number的第一个值并返回它就更简单了

$result = false;
foreach(array_reverse($arr) as $v)
{
  if($v <= $number)
  {
      $result = $v;
      break;
  }
}
if($result !== false)
  echo $result;
$result=false;
foreach(数组_反向($arr)为$v)
{

如果($v您可以从末尾搜索如果数组排序正确,只需找到不超过$number的第一个值并返回它就更简单了

$result = false;
foreach(array_reverse($arr) as $v)
{
  if($v <= $number)
  {
      $result = $v;
      break;
  }
}
if($result !== false)
  echo $result;
$result=false;
foreach(数组_反向($arr)为$v)
{

如果($v您也可以使用此功能:

function get_less_value($arr, $number) {

    // Always sort the array first
    sort($arr);
    $i = 0;

    $biggest = 0;

    while ($number >= $arr[$i]) {
        $biggest = $arr[$i];
        $i++;
    }

    return $biggest;
}

echo get_less_value($arr, $number);
这是一个简单的解决方案,如果您的阵列非常大,它的工作速度可能会很慢。 看看搜索算法。例如:


关于算法的另一个PDF:

您也可以使用此功能:

function get_less_value($arr, $number) {

    // Always sort the array first
    sort($arr);
    $i = 0;

    $biggest = 0;

    while ($number >= $arr[$i]) {
        $biggest = $arr[$i];
        $i++;
    }

    return $biggest;
}

echo get_less_value($arr, $number);
这是一个简单的解决方案,如果您的阵列非常大,它的工作速度可能会很慢。 看看搜索算法。例如:

关于算法的另一个PDF: