PDA

View Full Version : [PHP] Funzione che estrae il secondo più grande da un insieme


*nicola*
23-02-2011, 21:26
Ciao, sto cercando una funzione che, date N variabili (contenenti numeri), mi estragga il 1°, 2°, 3° ,... n-esimo più grande.

In pratica attraverso un form l'utente assegna 3 numeri alle variabili $a, $b, $c

Esempio:
$a=1, $b=4, $c=2

vorrei una funzione che mi permetta di assegnare alla variabile $x il secondo valore più grande quindi, tornando all'esempio,
$x=2

Leggendo alcuni risultati con Google ho trovato come farlo dispondendo le variabili a,b e c in un array che poi si ordina in mdoo crescente, quindi si potrebbe selezionare il 2 elemento dell'array.
Vorrei però riuscire a sviluppare questo mini algoritmo senza passare per gli array, cred che esista una funzione del genere (sono quasi sicuro che esista una cosa simile su Excel quindi potrebbe esserci anche in PHP).

Grazie!

black_wizard
23-02-2011, 23:09
deleted

bobbytre
23-02-2011, 23:13
per quanto mi sembri una cosa molto macchinosa , si potrebbe risolvere cosi

//.

$primo = 0;
$secondo = 0;
$terzo = 0;

if( $a > $primo)
{
$terzo = $secondo;
$secondo = $primo;
$primo = $a;
}
else
{
if( $a > $secondo)
{
$terzo = $secondo;
$secondo = $a;
}
else
{
if( $a > $terzo)
{
$terzo = $a;
}
}
}

// ...

if( $b > $primo)
{
$terzo = $secondo;
$secondo = $primo;
$primo = $b;
}
else
{
if( $b > $secondo)
{
$terzo = $secondo;
$secondo = $b;
}
else
{
if( $b > $terzo)
{
$terzo = $b;
}
}
}

// ... e cosi via per ogni variabile

black_wizard
23-02-2011, 23:15
c'è il comando max che fa a caso tuo.
Codice:

echo max($a, $b, $c);


mostrerà il valore più alto.

c'è anche il min se interessa.

echo min($a, $b, $c);


mostrerà il valore più basso.

Poi se uno dei valori non è di tipo numerico, tipo una parola..allora quel valore sarà considerato 0.

black_wizard
24-02-2011, 09:22
solo ora ho letto bene..tu vuoi il secondo valore più alto.
Beh possiamo sempre usare le 2 funzioni citate sopra min e max


$massimo = max($a, $b, $c);
$minimo = min($a, $b, $c);

$somma = $a+$b+$c;
$risultato = $somma-$massimo-$minimo;


il risultato darà appunto il 2°valore più alto che poi visto che sono 3..darà sempre il valore di mezzo. :D
Ovviamente funziona solo con 3 numeri..se si aumentano i numeri bisogna cambiare il sistema (di poco).

*nicola*
24-02-2011, 22:01
Grazie 1000 ragazzi, pensavo che si potesse evitare gli array in modo più semplice invece appare un po' macchinoso.

black_wizard
24-02-2011, 22:12
Grazie 1000 ragazzi, pensavo che si potesse evitare gli array in modo più semplice invece appare un po' macchinoso.

io non vedo la "macchinosità" nel codice precedente..:stordita:

*nicola*
24-02-2011, 22:28
io non vedo la "macchinosità" nel codice precedente..:stordita:
No infatti però nel caso in cui si voglia estendere il numero di variabili mi sa che diventa più complesso.