代码
<?php
$array = array("1", "2", "3", "4", "5", "6", "7", "8", "100");
$max = $temp = 0;
$min = $temp = 0;
//This loop is to get max and min value from array
for ($i = 0 ; $i < count($array); $i++) {
if ($i == 0) {
$max = $temp = $array[$i];
}
if ($i > 0) {
if ($array[$i] > $temp) {
$max = $array[$i];
}
}
if ($i == 0) {
$min = $temp = $array[$i];
}
if ($i < 0) {
if ($array[$i] < $temp) {
$min = $array[$i];
}
}
}
echo "Max Number = $max <br>";
echo "Min Number = $min";
?>
以上代码仅计算数组中的一个最小值和一个最大值。我需要它来计算3个最大值和3个最小值。
我不能使用预制函数,也不能使用多个for循环,所以请在上面的代码中建议我自定义。
答案 0 :(得分:1)
这看起来很整洁。
<?php
$array = array("1", "2", "3", "4", "5", "6", "7", "8", "100");
$n1 = $n2 = $n3 = 1000 ; // some high number
$m1 = $m2 = $m3 = 0 ;
//This loop is to get max and min value from array
for ($i = 0 ; $i < count($array); $i++) {
$x = $array[$i] ;
//min
if ($x <= $n1){
$n3 = $n2 ;
$n2 = $n1 ;
$n1 = $x ;
} elseif ($x < $n2){
$n3 = $n2;
$n2 = $x;
} elseif ($x < $n3){
$n3 = $x;
}
//max
if ($x >= $m1){
$m3 = $m2 ;
$m2 = $m1 ;
$m1 = $x ;
} elseif ($x > $m2){
$m3 = $m2;
$m2 = $x;
} elseif ($x > $m3){
$m3 = $x;
}
}
echo "Min Number = $n1 $n2 $n3<br>";
echo "Max Number = $m1 $m2 $m3";
?>
输出:
Min Number = 1 2 3
Max Number = 100 8 7
答案 1 :(得分:0)
您可以使用if语句
来处理此问题在循环时找到除前一个之外的其他最小/最大值时,检查最大/最小值是否有效。这是您使用的算法
让我们假设您的min = 5
循环后当前索引值为3,因此您必须进行min=3
例如,将{5}分配给min2
怎么样?
三个变量min1,min2,min3和嵌套的if语句
我知道这不是最好的方式。但你试过这个吗?
答案 2 :(得分:0)
此代码正常运行
<?php
$array = array("1", "2", "3", "4", "5", "6", "7", "8", "100");
$max1 =$max2 =$max3= -999999999999999; // highest possible number
$min3 = $min2= $min1 = 9999999999999999; // lowest possible number
for ($i = 0 ; $i < count($array); $i++) {
$x = $array[$i] ;
//to get the max 3 numbers
if($x>= $max1)
{
$max3 = $max2;
$max2 = $max1;
$max1 = $x;
}
else if ($x> $max2)
{
$max3 = $max2;
$max2 = $x;
}
else if ($x> $max3)
{
$max3 = $x;
}
// to get the min 3 numbers
if($x<=$min3 && $x>$min2 )
{
$min3 = $x;
}
else if ($x<$min2 && $x>$min1)
{
$min3 = $min2;
$min2 = $x;
}
else if ( $x<$min1)
{
$min3 = $min2;
$min2 = $min1;
$min1 = $x;
}
}
echo "Max Number = $max1 , $max2 , $max3 <br>";
echo "Min Number = $min1 , $min2 , $min3";
?>
输出
Max Number = 100 , 8 , 7
Min Number = 1 , 2 , 3
有比这更好的方法和更高效的方法,但需要2个循环而且你不想要它!
答案 3 :(得分:-1)
您只需要对数组进行反向排序,然后对前三个索引进行切片。你可以把它表达为一个函数:
function topThree(Array $arr) {
// Sort the array in reverse
rsort($arr);
// Return the first three indexes (top three)
return array_slice($arr, 2);
}
请参阅rsort
和array_slice
编辑:好的,这是有效的
/**
* Sorts an array of numeric values from largest to
* smallest and returns the three highest values.
*
* @param Array $arr An array of numeric values.
* @return Array $srt The three highest values in $arr.
*/
function topThree(Array $arr) {
$srt = [];
foreach($arr as $key => $val) {
if(!$key) {
$srt[] = $val;
} else if ($val < $srt[0]) {
array_unshift($srt, $val);
} else if ($val > $srt[count($srt)-1]) {
array_push($srt, $val);
} else {
for( $i=1; $i<count($srt); $i++) {
if($val < $srt[$i]) {
array_splice( $srt, $i, 0, $val );
break;
}
}
}
}
$max = array_slice($srt, -3, 3);
$min = array_slice($srt, 0, 3);
return ["min" => $min, "max" => $max];
}
// "Test"
for($i=0; $i<20;$i++){
$arr[]=rand(-100,100);
}
print_r($arr);
print_r(topThree($arr));
如果$val
将第$key
$val
个$sort
添加到$val
。
如果$sort[0]
小于$val
$sort
被添加到$val
的开头。
如果$sort[length]
大于$val
,则$sort
已添加到$val
的末尾。
否则,我们会针对每个其他$sort
值检查每个$sort[$i]
。当我们发现$val
值大于$val
时,我们会在$i
处将数组与public string payload { get; set; }
拼接在一起。
有意义吗?