之前面试,一位大牛问到,怎么得到一维数组里面第二大的数值,
我脑中想到的是冒泡排序,他说不能用冒泡排序,
然后我想到还有数组函数,大牛说不能用数组函数,
我就茫然了,大牛告诉了我两个方法,现在我将两种方法整理一下:
1:找到最大的值,然后unset掉,再找一次
function getMax($arr,$ifUnset='no')//$arr 待处理数组 $ifUnset 是否需要unset最大值,默认不 { $max = $arr[0]; $key = 0; foreach ($arr as $k => $v) { if ($v > $max) { $max = $v; $key = $k; } } if($ifUnset==='yes'){ unset($arr[$key]); return $arr; }else{ return $max; } }$arr = array(12, 35, 143, 32, 23, 45, 26, 66, 18, 78, 99, 178);$arr1 = getMax($arr,'yes');//先将最大的值unset,得到新数组var_dump(getMax($arr1));//得到新数组的最大值
$arr = array(12, 35, 143, 32, 23, 45, 26, 66, 18, 78, 99, 178); $max1 = $max2 = 0; foreach ($arr as $k => $v) { if ($k <= 1) { if ($arr[0] >= $arr[1]) { $max1 = $arr[0]; $max2 = $arr[1]; } else { $max1 = $arr[1]; $max2 = $arr[0]; } } else { if ($v >= $max1) { $max2 = $max1; $max1 = $v; } elseif ($v >= $max2 && $v < $max1) { $max2 = $v; } } echo '最大数: ' . $max1 . '----第二大数: ' . $max2 . '<br/>'; }
以上代码也许不是最好的,也就这样了吧,有写得更好的大牛,希望不吝赐教.