【问题标题】:Create a max and min function with loops - PHP使用循环创建一个 max 和 min 函数 - PHP
【发布时间】:2015-09-21 20:37:44
【问题描述】:

我正在尝试创建一个接受数字数组的函数,然后, 从给定数组中返回最小和最大数 作为使用数组和 for 循环的关联数组。

例如:

$sample = array( 135, 2.4, 2.67, 1.23, 332, 2, 1.02); 
$output = get_max_and_min($sample); 
var_dump($output); 
//$output should be equal to array('max' => 332, 'min' => 1.02);*/

到目前为止,这是我的代码:

$sample = array( 135, 2.4, 2.67, 1.23, 332, 2, 1.02); 
    function get_max_and_min($array){
        for($i=0; $i>=$array; $i++){
            echo $i;
        }
    }

    $output = get_max_and_min($sample); 
    echo $output;
  /*  var_dump($output); */

有什么想法吗?谢谢!

【问题讨论】:

标签: php html css


【解决方案1】:

演示如何使用min和`max函数。

$sample = array( 135, 2.4, 2.67, 1.23, 332, 2, 1.02);
echo max($sample) . "\n";
echo min($sample) . "\n";

输出:

332
1.02

功能链接:
http://php.net/manual/en/function.max.php
http://php.net/manual/en/function.min.php

在线演示:http://sandbox.onlinephpfunctions.com/code/dd41a06cb470ad6b2a1925d7c017b6b79fb8a880

或作为数组:

$sample = array( 135, 2.4, 2.67, 1.23, 332, 2, 1.02);
$values['max'] =  max($sample);
$values['min'] = min($sample);
print_r($values);

输出:

Array
(
    [max] => 332
    [min] => 1.02
)

更新 2,作为一个函数,

$sample = array( 135, 2.4, 2.67, 1.23, 332, 2, 1.02);
print_r(get_min_max($sample));
function get_min_max($array) {    
    $values['max'] =  max($array);
    $values['min'] = min($array);
    return $values;
}

【讨论】:

  • 不,我已经知道这个最大值和最小值了。这些是内置函数。但是,我正在寻找一些方法来使用 PLAIN FOR LOOPS 来做到这一点。我需要对此进行一些逻辑处理。请仔细阅读上面的问题。
  • 因为我们正在尽最大努力使用逻辑而不是简单的 PHP 构建函数。
  • 我怀疑使用 for 循环会比使用 min 和 max 函数效率低。
  • max/min 函数可以获取数组键而不是值吗?
  • 提供的数组中没有键。如果你正在寻找这个线程应该解决这个问题。 stackoverflow.com/questions/6126066/… 并使用相反的 min 作为最小值。
【解决方案2】:
function min_and_max(array $array) {
    $min = null;
    $max = null;
    foreach ($array as $number) {
        if ($min === null || $number < $min) {
            $min = $number;
        }
        if ($max === null || $max < $number) {
            $max = $number;
        }
     }
     return array ('max' => $max, 'min' => $min);
}

【讨论】:

  • 不,我已经知道这个最大值和最小值了。这些是内置函数。但是,我正在寻找一些方法来使用 PLAIN FOR LOOPS 来做到这一点。这个我需要一点逻辑。
  • maxmin 将是最快的。 sortarray_poparray_unshift 可能同样快。 foreach 循环似乎很曲折。
  • 这个 foreach 循环配合不起作用。不过试过了。它一定是这样的。 $样本=数组(135、2.4、2.67、1.23、332、2、1.02); $output = get_max_and_min($sample); var_dump($输出); //$output 应该等于 array('max' => 332, 'min' => 1.02);*/
  • 真的吗?为我工作:3v4l.org/iFJ1L。除非你的意思是函数名不同,在这种情况下,好吧,我不会为你做所有事情。
  • 我解析变量而不是普通的新数组:3v4l.org/vJPLD 它返回不同的东西。
【解决方案3】:

希望你能得到一个想法

function getArrayMaxAndMin($sampleArray)
{
    $arrayMax = max($sampleArray);
    $arrayMin = min($sampleArray);
    $result = array('Max'=>$arrayMax,'Min'=>$arrayMin);
    print_r($result);
}

$sample = array( 135, 2.4, 2.67, 1.23, 332, 2, 1.02);
getArrayMaxAndMin($sample);

使用 for 循环编辑答案

function getArrayMaxAndMin($sampleArray)
{
    for($i=0;$i<count($sampleArray);$i++)
    {
        if($i==0)
        {
            $max = $sampleArray[$i];
            $min = $sampleArray[$i];
        }
        $max = ($max<$sampleArray[$i]?$sampleArray[$i]:$max);
        $min = ($min<$sampleArray[$i]?$min:$sampleArray[$i]);
    }
    $result = array('Max'=>$max,'Min'=>$min);
    print_r($result);
}
$sample = array( 135, 2.4, 2.67, 1.23, 332, 2, 1.02);
getArrayMaxAndMin($sample);

【讨论】:

  • 不,我已经知道这个最大值和最小值了。这些是内置函数。但是,我正在寻找一些方法来使用 PLAIN FOR LOOPS 来做到这一点。这个我需要一点逻辑。
【解决方案4】:

如果你想要逻辑,那么你需要循环比较并存储一些临时值:

$max = $temp = 0;
//This loop is to get max 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];

       }
   }
}

echo $max 你会得到价值。

类似这样的最小值

$min = $temp = 0;
//this loop is to get min value from array
for ($i = 0 ; $i < count($array); $i++) {
   if ($i == 0) {
        $min = $temp = $array[$i];
   }
   if ($i > 0) {
       if ($array[$i] < $temp) {
             $min = $array[$i];

       }
   }
}

所以你的完整功能是

function get_max_and_min($array) {
     $max = $temp = 0;
      //this loop is to get max value from array
     for ($i = 0 ; $i < count($array); $i++) {
         //check if this is first loop then assign first value as $max
         if ($i == 0) {
             $max = $temp = $array[$i];
         }
        //if this is not first loop then go in this if
        if ($i > 0) {
           //check if this value of array is greater than $temp
           if ($array[$i] > $temp) {
               $max = $array[$i];

           }
        }
    }
     $min = $temp = 0;
      //this loop is to get min value from array
     for ($i = 0 ; $i < count($array); $i++) {
         //check if this is first loop then assign first value as $min
         if ($i == 0) {
             $min = $temp = $array[$i];
         }
         //if this is not first loop then go in this if
         if ($i > 0) {
             //check if this value of array is lesser than $temp
             if ($array[$i] < $temp) {
                 $min = $array[$i];

             }
         }
      }
    $maxMinArray['max'] = $max;
    $maxMinArray['min'] = $min;                
    return $maxMinArray;
}

【讨论】:

  • 那么分钟呢?
  • 也可以是函数吗?
  • 那如何完全实现这个功能呢?
  • 我已经添加了功能。
  • 哇!伟大的!那你能给我解释一下代码吗?如果您可以在每个循环上放置一些 cmets,它会做什么?
猜你喜欢
  • 2012-08-22
  • 1970-01-01
  • 2014-04-23
  • 2017-08-06
  • 2021-12-24
  • 1970-01-01
  • 2010-12-10
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多