## 【PHP】 多种解法 获取给定值在数值中的最大下限，你能给出你的解法吗？

justphp 发布于 2013/12/16 17:07

\$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;

0
\$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";

0
//第二种
\$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;

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

echo \$val;

0

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

\$max = 0;

\$min = 0;

0

\$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;

0

#### 引用来自“justphp”的答案

\$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);

0

#### 引用来自“justphp”的答案

\$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

0
@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/>';

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

#### 引用来自“justphp”的答案

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

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