如何从数组行中获取最小值

Posted

技术标签:

【中文标题】如何从数组行中获取最小值【英文标题】: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.net/manual/en/array.sorting.php php.net/manual/en/function.min.php 【参考方案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】:
    使用foreach() 循环或array_walk() 迭代每一行/子数组。 使用array_shift() 提取并显示id(第一个元素)值。 对各个子数组中的剩余值调用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

【讨论】:

以上是关于如何从数组行中获取最小值的主要内容,如果未能解决你的问题,请参考以下文章

如何从Javascript中的数组中获取最小的差异值

如何从特定小时范围内的行中选择最小值?

从Javascript中的数组中获取最小值?

从动态数据表中查找行中的最小值

如何从给定数组的范围查询中获取给定值的最小异或值

Java中如何获取一维数组最小值