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

时间:2013-10-07 10:09:42

标签: php arrays minimum

我试图从任意列中获取最小值,在列名中包含“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";
}
?>

6 个答案:

答案 0 :(得分:2)

你已经有了一个功能:

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结合使用。

答案 1 :(得分:2)

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

OR

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

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

答案 2 :(得分:0)

不要再使用min()函数再次循环。

$lowest_keys = array();

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

答案 3 :(得分:0)

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 :(得分:0)

$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;

答案 5 :(得分:0)

  1. 使用foreach()循环或array_walk()循环每一行/子数组。
  2. 使用id提取并显示array_shift()(第一个元素)值。
  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