15
回答
【PHP】 多种解法 获取给定值在数值中的最大下限,你能给出你的解法吗?
$arr = array(2 , 6 , 8 , 10 , 12 , 30);

$current = 9;

//求解 当前值在数组中的最大下限值(3)

//我自己先给出一种
	$arr = array(2 , 6 , 8 , 10 , 12 , 30);
	$current = 9;
	
	$newArr = array();
	for($i=count($arr)-1;$i>=0;$i--){
		$newArr[count($arr) - $i - 1] = $arr[$i];
	}
	
	foreach ($newArr as $key=>$val){
		if($current >= $val) break;
	}
	echo $val;



PHP
举报
justphp
发帖于5年前 15回/478阅
共有15个答案 最后回答: 4年前
$rr = array(-1,23,1,2,3,4,6575,242,6,-6,3,2,6); //无论数字怎么变化, 它都可以找到最小, 最大值.

$min = 0;
$max = 0;
foreach($rr as $key=>$val){
    if($key > 0){
      $val < $min && $min = $val;
    }else
      $min = $val;
    
    if($val >= $max) $max = $val;
} 

echo "min: $min, max: $max";


//第二种
	$arr = array(2 , 6 , 8 , 10 , 12 , 30);
	$current = 9;
	
	foreach ($arr as $key=>$val){
		if ($arr[$key+1] > $current && $current >= $val) {
			break;
		}
	}
	
	echo $val;



rsort($arr);
    foreach($arr as $val){
    if($current >= $val) break;
    }

    echo $val;

不就完了吗

--- 共有 1 条评论 ---
justphp没错! 使用api函数,确实简化了上面的第一种解法! 5年前 回复

$arr = array(-2,61,20 ,15, 63 , 8 , 10 , 12 , 30);

$max = 0;

$min = 0;

不可增加变量, 不可用函数, 仅可用一个foreach, 求计算出它最大值, 最小值.

@Tuesday

$arr = array(-2,61,20 ,15, 63 , 8 , 10 , 12 , 30);
	$min = $max = 0;
	
	foreach ($arr as $key=>$val){
		if($val < $min) $min = $val;
		if($val > $max) $max = $val;
	}
	unset($key , $val , $arr);
	echo $min.'--'.$max;



引用来自“justphp”的答案

@Tuesday

$arr = array(-2,61,20 ,15, 63 , 8 , 10 , 12 , 30);
	$min = $max = 0;
	
	foreach ($arr as $key=>$val){
		if($val < $min) $min = $val;
		if($val > $max) $max = $val;
	}
	unset($key , $val , $arr);
	echo $min.'--'.$max;



亲,
$arr = array(5,61,20 ,15, 63 , 8 , 10 , 12 ,1, 30);

不对哦...
--- 共有 5 条评论 ---
justphp回复 @Tuesday : 给出你的解!! 5年前 回复
Tuesday回复 @justphp : 你运行一下看看效果... 5年前 回复
justphp回复 @Tuesday : 我知道! $min 和 $max 取$arr 中的随机一个元素 就行 5年前 回复
Tuesday回复 @justphp : 用我上面这个数组... 你得考虑我的数字在变化呀... 5年前 回复
justphp打印的结果 就是 -2 和 63! 怎么不对了? 5年前 回复

引用来自“justphp”的答案

@Tuesday

$arr = array(-2,61,20 ,15, 63 , 8 , 10 , 12 , 30);
	$min = $max = 0;
	
	foreach ($arr as $key=>$val){
		if($val < $min) $min = $val;
		if($val > $max) $max = $val;
	}
	unset($key , $val , $arr);
	echo $min.'--'.$max;



$arr = array(5,61,20 ,15, 63 , 8 , 10 , 12 ,1, 30); 
$min = $max = 0;
	
foreach ($arr as $key=>$val){
	if($val < $min) $min = $val;
	if($val > $max) $max = $val;
}
unset($key , $val , $arr);
echo $min.'--'.$max;  
// 0-- 63 明显是不对的, 数组中最小的值是1


@Tuesday 这种方法可行吧!
foreach ($arr as $key=>$val){
		if ($key==0) {
			$min = $arr[$key+1] > $arr[$key] ? $arr[$key] : $arr[$key+1];
			$max = $arr[$key+1] < $arr[$key] ? $arr[$key] : $arr[$key+1];
		}
		else {
			if(!isset($arr[$key+1])) break;
			$min = $arr[$key+1] > $arr[$key] ? ($arr[$key] > $min ? $min : $arr[$key]) : ($arr[$key+1] > $min ? $min : $arr[$key+1]);
			$max = $arr[$key+1] < $arr[$key] ? ($arr[$key] < $max ? $max : $arr[$key]) : ($arr[$key+1] < $max ? $max : $arr[$key+1]);
		}
	}
	echo $min.'--'.$max.'<br/>';



--- 共有 1 条评论 ---
Tuesday不可以用函数... 亲. 5年前 回复

引用来自“justphp”的答案

@Tuesday 请把你觉得满足你的条件的解法 贴出来!  

$arr =array(5,61,20 ,15, 63 , 8 , 10 , 12 ,1, 30);

需求很简单呀, $max, $min 变量, 不用函数请找到最大, 最小的值.

顶部