【问题标题】:Get min and max value in PHP Array获取PHP数组中的最小值和最大值
【发布时间】:2011-08-16 07:30:03
【问题描述】:

我有一个这样的数组:

array (0 => array ( 'id' => '20110209172713', 'Date' => '2011-02-09', 'Weight' => '200', ), 1 => array ( 'id' => '20110209172747', 'Date' => '2011-02-09', 'Weight' => '180', ), 2 => array ( 'id' => '20110209172827', 'Date' => '2011-02-09', 'Weight' => '175', ), 3 => array ( 'id' => '20110211204433', 'Date' => '2011-02-11', 'Weight' => '195', ), )

我需要提取最小和最大权重值。 在这个例子中

$min_value = 175

$max_value = 200

关于如何做到这一点的任何帮助? 谢谢!

【问题讨论】:

  • 我开始认为 PHP 需要一个新的位置运算符来解决最近关于“直接”访问二维数组索引的所有问题......
  • array_pluckarray_column 已被建议(如 7 年前)。我不期待很快会有类似的事情发生。 And another one here.

标签: php arrays extract


【解决方案1】:

选项 1. 首先映射数组以获取这些数字(而不是完整的详细信息):

$numbers = array_column($array, 'weight')

然后你得到最小值和最大值:

$min = min($numbers);
$max = max($numbers);

选项 2.(仅当您没有 PHP 5.5 或更高版本时)与选项 1 相同,但要提取值,请使用 array_map

$numbers = array_map(function($details) {
  return $details['Weight'];
}, $array);

选项 3.

选项 4。如果您只需要一个最小值或最大值,array_reduce() 可能会更快:

$min = array_reduce($array, function($min, $details) {
  return min($min, $details['weight']);
}, PHP_INT_MAX);

这会更多min()s,但它们非常快。 PHP_INT_MAX 是从一个高点开始,然后越来越低。您可以对$max 执行相同的操作,但您可以从0-PHP_INT_MAX 开始。

【讨论】:

  • 选项 1 和 3 似乎相同?
  • @Pang 你是对的。他们并不总是,但现在他们是。
【解决方案2】:

从数组中快速打印五个最大和最小数,而不使用 php 中的排序数组 :-

<?php  

$array = explode(',',"78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 81, 76, 73,  
68, 72, 73, 75, 65, 74, 63, 67, 65, 64, 68, 73, 75, 79, 73");  
$t=0;  
$l=count($array);  
foreach($array as $v)  
{  
 $t += $v;  
}  
 $avg= $t/$l;  
 echo "average Temperature is : ".$avg."  ";   


echo "<br>List of seven highest temperatsures :-"; 
$m[0]= max($array); 
for($i=1; $i <7 ; $i++)
{ 
$m[$i]=max(array_diff($array,$m));
}
foreach ($m as $key => $value) {
    echo "  ".$value; 
}
echo "<br> List of seven lowest temperatures : ";
$mi[0]= min($array); 
for($i=1; $i <7 ; $i++)
{ 
$mi[$i]=min(array_diff($array,$mi));
}

foreach ($mi as $key => $value) {
    echo "  ".$value; 
}
?>  

【讨论】:

    【解决方案3】:

    不使用minmax 等预定义函数怎么样?

    $arr = [4,5,6,7,8,2,9,1];
    $val = $arr[0];
    $n = count($arr);
    
    for($i=1;$i<$n;$i++) {
    if($val<$arr[$i]) {
        $val = $val;        
    } else {
        $val = $arr[$i];
    }
    }
    print($val);
    

    ?>

    【讨论】:

      【解决方案4】:
      $Location_Category_array = array(5,50,7,6,1,7,7,30,50,50,50,40,50,9,9,11,2,2,2,2,2,11,21,21,1,12,1,5);
      
      asort($Location_Category_array);
      $count=array_count_values($Location_Category_array);//Counts the values in the array, returns associatve array
              print_r($count);
              $maxsize = 0;
              $maxvalue = 0;
              foreach($count as $a=>$y){
                  echo "<br/>".$a."=".$y;
                  if($y>=$maxvalue){
                      $maxvalue = $y;
                      if($a>$maxsize){
                          $maxsize = $a;
                      }
                  }
              }
      
          echo "<br/>max = ".$maxsize;
      

      【讨论】:

        【解决方案5】:

        对于使用 PHP 5.5+ 的人来说,使用array_column 可以更轻松地完成这项工作。不再需要那些丑陋的array_maps了。

        如何获得最大值:

        $highest_weight = max(array_column($details, 'Weight'));
        

        如何获得最小值

        $lowest_weight = min(array_column($details, 'Weight'));
        

        【讨论】:

          【解决方案6】:
          <?php 
          $array = array (0 => 
            array (
              'id' => '20110209172713',
              'Date' => '2011-02-09',
              'Weight' => '200',
            ),
            1 => 
            array (
              'id' => '20110209172747',
              'Date' => '2011-02-09',
              'Weight' => '180',
            ),
            2 => 
            array (
              'id' => '20110209172827',
              'Date' => '2011-02-09',
              'Weight' => '175',
            ),
            3 => 
            array (
              'id' => '20110211204433',
              'Date' => '2011-02-11',
              'Weight' => '195',
            ),
          );
          
          foreach ($array as $key => $value) {
            $result[$key] = $value['Weight'];
          }
          $min = min($result);
          $max = max($result);
          
          echo " The array in Minnumum number :".$min."<br/>";
          echo " The array in Maximum  number :".$max."<br/>";
          ?> 
          

          【讨论】:

            【解决方案7】:
            $num = array (0 => array ('id' => '20110209172713', 'Date' => '2011-02-09', 'Weight' => '200'),
                      1 => array ('id' => '20110209172747', 'Date' => '2011-02-09', 'Weight' => '180'),
                      2 => array ('id' => '20110209172827', 'Date' => '2011-02-09', 'Weight' => '175'),
                      3 => array ('id' => '20110211204433', 'Date' => '2011-02-11', 'Weight' => '195'));
            
                foreach($num as $key => $val)   
                {                       
                    $weight[] = $val['Weight'];
                }
            
                 echo max($weight);
                 echo min($weight);
            

            【讨论】:

              【解决方案8】:

              有趣的是,上述两种解决方案都使用数组形式的额外存储(第一个是其中的两个,第二个使用一个数组),然后您使用“额外存储”数组找到最小值和最大值。虽然这在实际编程世界中可能是可以接受的(谁给出了关于“额外”存储的两点?)它会让你在编程 101 中获得“C”。

              只需要两个额外的内存插槽就可以轻松解决找到最小值和最大值的问题

              $first = intval($input[0]['Weight']);
              $min = $first ;
              $max = $first ;
              
              foreach($input as $data) {
                  $weight = intval($data['Weight']);
              
                  if($weight <= $min ) {
                      $min =  $weight ;
                  }
              
                  if($weight > $max ) {
                      $max =  $weight ;
                  }
              
              }
              
              echo " min = $min and max = $max \n " ;
              

              【讨论】:

              • 您可能希望将if($weight &gt; $max ) { 替换为if($weight &gt;= $max ) { 以确保$max 始终具有$weight
              【解决方案9】:
              foreach ($array as $k => $v) {
                $tArray[$k] = $v['Weight'];
              }
              $min_value = min($tArray);
              $max_value = max($tArray);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-11-23
                • 2017-12-13
                • 2012-02-11
                • 1970-01-01
                • 1970-01-01
                • 2023-03-18
                • 2019-09-19
                • 1970-01-01
                相关资源
                最近更新 更多