Corsi on-line

Estendere le funzioni max() e min()

In PHP esistono le due funzioni max() e min() che estraggono, rispettivamente, il valore massimo e minimo di una serie di due o più numeri o all’interno di un array.
Però, se nella serie di numeri o all’interno di un array vi sono due massimi o minimi uguali, le due funzioni ne estraggono uno solo.
Inoltre se non voglio sapere solo i valori ma anche la loro posizione in un array scalare o la chiave in caso di array associativo, le due funzioni citate non sono sufficienti.

Per questo motivo ho implementato questa piccola funzione che, dato un array scalare o associativo, ne estrae il valore max e min, anche se duplicati, indicando dove questi sono posizionati.
Penso che lo script sia sufficientemente commentato.

<?php
function min_max($a){
  if(!is_array($a)){ return false; }//verifico che sia un array
  $val_max = max($a); //estraggo il valore massimo
  while ($max_name = current($a)) { //ciclo l'array per trovarne la posizione o la chiave
    if ($max_name === $val_max) { // messo === per uguagliare anche il tipo di dato
      //concateno per avrere anche i dati di massimo duplicati
      $minimax['max'].= "il massimo è in [".key($a)."] e vale ".$val_max."&lt;br/&gt;";
    }
    next($a); //passo al successivo elemento dell'array
  }
  reset($a); //riporto l'indice al primo elemento
  $val_min = min($a); //estraggo il valore minimo, il resto come sopra
  while ($max_name = current($a)) {
    if ($max_name === $val_min) {
      $minimax['min'].= "il minimo è in [".key($a)."] e vale ".$val_min."&lt;br/&gt;";
    }
    next($a);
  }
  return $minimax;
}//fine function
?>

Vediamo ora qualche esempio di funzionamento:

<?php
//con array associativo
$valori_1 = array("bianco"=>30,"rosso"=>25,"verde"=>102.5,"blu"=>101.9,"arancio"=>25,"azzurro"=>97);
$risulta = min_max($valori_1);
echo $risulta['max'];
echo $risulta['min'];

//con array scalare
//da la posizione: !!considerare che il primo indice è 0!!
$valori_2 = array(30,26,102.5,104.9,28,104.9);
$risulta = min_max($valori_2);
echo $risulta['max'];
echo $risulta['min'];
?>
Post correlati

I commenti sono chiusi.

I più letti del mese
Tematiche