2011-05-01 114 views
30

我有一個這樣的陣列:獲取min和max值在PHP陣列

 

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

如何做到這一點任何幫助嗎? 謝謝!

+0

我開始覺得PHP需要一個新的位置運算符與所有近期有關「直接」訪問二維數組索引的問題...... – 2011-05-01 03:15:50

+1

'array_pluck'和'array_column'已被提出(如7年前)。我不期待很快會有類似的事情發生。 [另一個在這裏。](https://wiki.php.net/rfc/array_column) – Rudie 2013-01-21 19:26:13

回答

73

選項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.如果你只需要一分鐘或MAX,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啓動。

+3

這就是我所說的優雅 – 2016-01-05 17:18:58

+0

選項1和3看起來相同? – Pang 2017-05-31 02:04:14

+0

@Pang你說得對。他們並不總是,但現在他們是。 – Rudie 2017-05-31 16:06:05

14
foreach ($array as $k => $v) { 
    $tArray[$k] = $v['Weight']; 
} 
$min_value = min($tArray); 
$max_value = max($tArray); 
3

有趣的是,上面的兩個解決方案都以數組的形式使用額外的存儲(前兩個解決方案,第二個使用一個數組),然後使用「額外存儲」數組找到最小值和最大值。雖然在真正的編程世界中這可能是可以接受的(誰給出了兩個關於「額外」存儲的問題?),那麼在編程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 " ; 
0
$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); 
0
<?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/>"; 
?> 
8

對於使用PHP的人5.5+這是可以做到輕鬆了許多與array_column。不需要爲那些醜陋array_maps了。

如何獲得一個最大值:

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

如何得到最小值

$lowest_weight = min(array_column($details, 'Weight')); 
0
$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; 
0

如何在不使用預定義功能像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); 

>

0

打印速度快五個最大限度和陣列沒有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; 
} 
?>