web-dev-qa-db-fra.com

Obtenir les valeurs min et max dans PHP Tableau

J'ai un tableau comme celui-ci:


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',
  ),
)

J'ai besoin d'extraire des valeurs de poids minimales et maximales. Dans cet exemple 

$ min_value = 175

$ max_value = 200

Toute aide sur la façon de faire cela? Merci!

34
Peter

Option 1. Vous mappez d'abord le tableau pour obtenir ces nombres (et non les détails complets):

$numbers = array_column($array, 'weight')

Ensuite, vous obtenez le min et le max:

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

Option 2. (Uniquement si vous n'avez pas PHP 5.5.) Identique à l'option 1, mais pour plumer les valeurs, utilisez array_map:

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

Option 3.

Option 4. Si vous avez seulement besoin d'un min OR max, array_reduce() pourrait être plus rapide:

$min = array_reduce($array, function($min, $details) {
  return min($min, $details['weight']);
}, PHP_INT_MAX);

Cela fait plus min()s, mais ils sont très rapides. Le PHP_INT_MAX est de commencer par un haut et de plus en plus bas. Vous pouvez faire la même chose pour $max, mais vous commencerez par 0 ou -PHP_INT_MAX.

82
Rudie
foreach ($array as $k => $v) {
  $tArray[$k] = $v['Weight'];
}
$min_value = min($tArray);
$max_value = max($tArray);
15
Crayon Violent

Pour les personnes utilisant PHP 5.5+, cela peut être beaucoup plus facile avec array_column . Plus besoin de ces tableaux laids.

Comment obtenir une valeur maximale:

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

Comment obtenir la valeur min

$lowest_weight = min(array_column($details, 'Weight'));
9
RJD22

Il est intéressant de noter que les solutions ci-dessus utilisent toutes deux du stockage supplémentaire sous forme de tableaux (les deux premières et la seconde utilisent un tableau), puis que vous trouvez min et max en utilisant un tableau "extra storage". Bien que cela puisse être acceptable dans le monde réel de la programmation (qui donne deux mots sur le stockage "supplémentaire"?), Cela vous aurait valu un "C" en programmation 101.

Le problème de trouver min et max peut être facilement résolu avec seulement deux emplacements mémoire supplémentaires 

$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 " ;
3
rjha94

Et si on utilisait des fonctions prédéfinies comme min ou max?

$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
Sambhav
$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
rattanKunwar
<?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/>";
?> 
0
Hanifeoglu

imprimer rapidement cinq nombres maximum et minimum d'un tableau sans utiliser le tableau de tri en 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; 
}
?>  
0
dhavaloza
$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
Bhanwar