Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在循环中的数组中查找最接近的上限和下限数字_Php_Numbers_Closest - Fatal编程技术网

Php 在循环中的数组中查找最接近的上限和下限数字

Php 在循环中的数组中查找最接近的上限和下限数字,php,numbers,closest,Php,Numbers,Closest,我有一个数组。给定一个数字X(该数字不能包含在数组中),我希望在单个循环中搜索数组中下一个较大的和下一个较小的数字X。我的代码是: <?php $a = array(1, 8, 23, 25, 40,41,42,47, 52, 55, 66, 74,75, 76,77,78, 95, 102,103, 104, 105,106, 126, 128, 140, ); $v = 104; sort($a); $nearestGreater = null; $nearestL

我有一个数组。给定一个数字X(该数字不能包含在数组中),我希望在单个循环中搜索数组中下一个较大的和下一个较小的数字X。我的代码是:

<?php
  $a = array(1, 8, 23, 25, 40,41,42,47, 52, 55, 66, 74,75, 76,77,78, 95, 102,103, 104, 105,106, 126, 128, 140, );
  $v = 104;
  sort($a);
  $nearestGreater = null;
  $nearestLower = null;
  foreach ($a as $key => $val) {
    if ( $v<=$val) {
      $nearestGreater = (isset($a[$key + 1])) ? $a[$key + 1]: $nearestGreater;
      $nearestLower = (isset($a[$key - 1])) ? $a[$key - 1]: $nearestLower;
      break;
    }
  }
  var_dump($nearestLower);
  echo "<br/>".$v."<br/>";
  var_dump($nearestGreater);
  unset($a);
?>    

使用代码块以清晰易读的方式编写代码

$nearestGreater=null;
$nearestLower = null;
 $a = array(1, 8, 23, 25, 40,41,22,47, 52, 55, 66, 74,75, 76,77,78, 95, 102,103, 104, 105,106, 126, 128, 140, );
 $v = 104; 
foreach( $a as $val)
  {
     if($val < $v)
          { 
              if(isset($nearestLower))
                {    if($nearestLower < $val)
                      $nearestLower=$val;
                }
                  else
                { 
                       $nearestLower=$val;
               }
          }

             if($val > $v)
          { 
              if(isset($nearestGreater))
                {    if($nearestGreater > $val)
                      $nearestGreater=$val;
                }
                  else
                { 
                       $nearestGreater=$val;
               }
          }
  }
$nearestmorer=null;
$nearestLower=null;
$a=数组(1,8,23,25,40,41,22,47,52,55,66,74,75,76,77,78,95,102103,104,105106,126,128,140,);
$v=104;
外汇($a作为$val)
{
如果($val<$v)
{ 
如果(isset($nearestLower))
{if($nearestLower<$val)
$nearestLower=$val;
}
其他的
{ 
$nearestLower=$val;
}
}
如果($val>$v)
{ 
如果(isset($nearestmore))
{if($nearestmorer>$val)
$nearestmorer=$val;
}
其他的
{ 
$nearestmorer=$val;
}
}
}

使用代码块以清晰易读的方式编写代码

$nearestGreater=null;
$nearestLower = null;
 $a = array(1, 8, 23, 25, 40,41,22,47, 52, 55, 66, 74,75, 76,77,78, 95, 102,103, 104, 105,106, 126, 128, 140, );
 $v = 104; 
foreach( $a as $val)
  {
     if($val < $v)
          { 
              if(isset($nearestLower))
                {    if($nearestLower < $val)
                      $nearestLower=$val;
                }
                  else
                { 
                       $nearestLower=$val;
               }
          }

             if($val > $v)
          { 
              if(isset($nearestGreater))
                {    if($nearestGreater > $val)
                      $nearestGreater=$val;
                }
                  else
                { 
                       $nearestGreater=$val;
               }
          }
  }
$nearestmorer=null;
$nearestLower=null;
$a=数组(1,8,23,25,40,41,22,47,52,55,66,74,75,76,77,78,95,102103,104,105106,126,128,140,);
$v=104;
外汇($a作为$val)
{
如果($val<$v)
{ 
如果(isset($nearestLower))
{if($nearestLower<$val)
$nearestLower=$val;
}
其他的
{ 
$nearestLower=$val;
}
}
如果($val>$v)
{ 
如果(isset($nearestmore))
{if($nearestmorer>$val)
$nearestmorer=$val;
}
其他的
{ 
$nearestmorer=$val;
}
}
}
试试这个:

?>


编辑为即使在匹配时也有两个较低和两个较高的值


试试这个:

?>


编辑为即使在匹配时也有两个较低和两个较高的值



thnks回复bt我想要两次迭代你所说的两次迭代是什么意思?我想要两个结果,例如如果$v=104;那么回复bt的输出应该是102103104105106thnks我想要两次迭代你所说的两次迭代是什么意思?我想要两个结果,例如如果$v=104;那么输出应该是102103104105106I想要两个结果,比如$v=58;输出应该是lesser=52,55,然后$v greater=66,74这段代码不适用于数组中存在的那些值。我想要这个东西,我想要两个结果,比如$v=58;输出应该是lesser=52,55,然后$v greater=66,74这段代码不适用于数组中存在的值。我希望在循环中使用这一点
<?php
    $allNumbers = array(1, 8, 23, 25, 40,41,42,47, 52, 55, 66, 74,75, 76,77,78, 95, 102,103, 104, 105,106, 126, 128, 140, );
    sort($allNumbers);
    $input = 55;
    $index = array_search($input, $allNumbers);
    if(empty($index)){
        foreach($allNumbers as $key => $value){
            if($value < $input){
                $index = ($key + 0.5);
            }else{
                break;
            }
        }
    }
    $below = array(
        $allNumbers[ceil($index - 2)],
        $allNumbers[ceil($index - 1)],
    );

    $above = array(
        $allNumbers[floor($index + 1)],
        $allNumbers[floor($index + 2)],
    );

    echo "<pre>";
    print_r(array(
        "input" => $input,
        "index" => $index,
        "below" => $below,
        "above" => $above,
    ));
    echo "</pre>";
?>