Php 在循环中的数组中查找最接近的上限和下限数字
我有一个数组。给定一个数字X(该数字不能包含在数组中),我希望在单个循环中搜索数组中下一个较大的和下一个较小的数字X。我的代码是: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
<?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>";
?>