【问题标题】:How to get the minimum value from array row如何从数组行中获取最小值
【发布时间】:2013-10-13 20:42:14
【问题描述】:

我试图从列名中包含“xx”的任何列中获取最小值。

下面是我的代码:

<?php
$array = array(
 array(
  'id' => 1,
  '10xx' => 14,
  '11xx' => 32,
  '12xx' => 4
 ),

  array(
   'id' => 2,
  '10xx' => 13,
  '11xx' => 36,
  '12xx' => 41
 )
);



foreach($array as $item)
{
 $lowestKey = '';
 foreach($item as $key => $value)
 {


  if(strpos($key, 'xx') === 0)
  {

   if($lowestKey == '')
   {
    $lowestKey = $key;
   }
   else
   {
    if($value < $item[$lowestKey])
    {
     $lowestKey = $key;
    }
   }
  }
 }

 echo 'lowest for id ' . $item['id'] . ': ' . $item[$lowestKey] . "\n";
}
?>

【问题讨论】:

标签: php arrays minimum


【解决方案1】:

你已经有了它的功能:

http://php.net/manual/en/function.min.php

echo min(2, 3, 1, 6, 7);  // 1
echo min(array(2, 4, 5)); // 2

echo min(0, 'hello');     // 0
echo min('hello', 0);     // hello
echo min('hello', -1);    // -1

如果这更符合您的需求,请将其与 array_values 结合起来。

【讨论】:

    【解决方案2】:

    只需使用 min() 函数,而不是再次在内部循环。

    $lowest_keys = array();
    
    foreach($array as $item)
    {
         unset( $item[ 'id' ] );
         $lowest_keys[] = min( $item );
    }
    

    【讨论】:

    • 您忘记了id 也在数组中,它导致最低键
    【解决方案3】:
    function find_lowest($array){
            $new_array = array();
            foreach($array  as $key => $val ){
                if(is_array($val)){
                    $new_array[$key] = find_lowest($val);
                }else{
                    $new_array[$key] =  $val ;
                }
            }
            return min($new_array);
    
        }
        $array = array( array(  'id' => 1,
      '10xx' => 14,
      '11xx' => 32,
      '12xx' => 4
     ),
    
      array(
       'id' => 2,
      '10xx' => 13,
      '11xx' => 36,
      '12xx' => 41
     )
    );
     echo find_lowest($array);
    

    【讨论】:

      【解决方案4】:
      function _getNumber($array) {
        return $array['id'];
      }
      $numbers = array_map('_getNumber', $array);
      

      $numbers = array_map(function($array) {
        return $array['id'];
      }, $array);
      
      echo $min = min($numbers);
      echo $max = max($numbers);
      

      【讨论】:

        【解决方案5】:
        $array = array(
                 array(
                  'id' => 14,
                  '10xx' => 14,
                  '11xx' => 32,
                  '12xx' => 4
                 ),
        
                  array(
                   'id' => 2,
                  '10xx' => 13,
                  '11xx' => 36,
                  '12xx' => 41
                  )
                );
        
            $lowestKey = '';
        
            foreach($array as $arra){
                foreach ($arra as $key=>$value){
                    if ($key == 'id'){
                        if(($value < $lowestKey )||( $lowestKey== '')){
                        $lowestKey = $value;
                        }
                    }
        
        
                }
            }
           echo $lowestKey;
        

        【讨论】:

          【解决方案6】:
          1. 使用foreach() 循环或array_walk() 迭代每一行/子数组。
          2. 使用array_shift() 提取并显示id(第一个元素)值。
          3. 对各个子数组中的剩余值调用min() 以确定最小值。

          没有条件表达式。没有不必要的变量。干净、简洁、有效。

          代码:(Demo)

          $array = [
              ['id' => 1, '10xx' => 14, '11xx' => 32, '12xx' => 4],
              ['id' => 2, '10xx' => 13, '11xx' => 36, '12xx' => 41]
          ];
          
          array_walk($array, function($row) {
              echo array_shift($row) , " : " , min($row) , "\n";
          });
          

          输出:

          1 : 4
          2 : 13
          

          【讨论】:

            猜你喜欢
            • 2023-01-05
            • 2020-08-07
            • 2019-12-25
            • 2020-03-24
            • 1970-01-01
            • 2023-03-18
            • 1970-01-01
            • 1970-01-01
            • 2012-02-14
            相关资源
            最近更新 更多