获取PHP数组中的最小值和最大值

Pet*_*ter 35 php arrays extract

我有这样一个数组:


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

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

Rud*_*die 89

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

$numbers = array_column($array, 'weight')
Run Code Online (Sandbox Code Playgroud)

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

$min = min($numbers);
$max = max($numbers);
Run Code Online (Sandbox Code Playgroud)

选项2.(仅当您没有PHP 5.5时.)与选项1相同,但要采用值,请使用array_map:

$numbers = array_map(function($details) {
  return $details['Weight'];
}, $array);
Run Code Online (Sandbox Code Playgroud)

选项3.

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

$min = array_reduce($array, function($min, $details) {
  return min($min, $details['weight']);
}, PHP_INT_MAX);
Run Code Online (Sandbox Code Playgroud)

这样做更多min(),但它们非常快.该PHP_INT_MAX是具有高启动,并得到越来越低.你也可以这样做$max,但是你要从0,或者开始-PHP_INT_MAX.

  • 这就是我所说的优雅 (3认同)

Cra*_*ent 15

foreach ($array as $k => $v) {
  $tArray[$k] = $v['Weight'];
}
$min_value = min($tArray);
$max_value = max($tArray);
Run Code Online (Sandbox Code Playgroud)


RJD*_*D22 10

对于使用PHP 5.5+的人来说,使用array_column可以轻松完成.不再需要那些丑陋的array_maps了.

如何获得最大值:

$highest_weight = max(array_column($details, 'Weight'));
Run Code Online (Sandbox Code Playgroud)

如何获得最小值

$lowest_weight = min(array_column($details, 'Weight'));
Run Code Online (Sandbox Code Playgroud)


rjh*_*a94 6

有趣的是,上述两种解决方案都使用数组形式的额外存储(第一个两个,第二个使用一个数组),然后您使用“额外存储”数组找到最小值和最大值。虽然这在真实的编程世界中可能是可以接受的(谁给出了两个关于“额外”存储的信息?)它会让你在编程 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 " ;
Run Code Online (Sandbox Code Playgroud)