- Home
- Categorie
- Coding e Sistemistica
- Coding
- Dubbio Numerico Php
-
Dubbio Numerico Php
Buonasera a tutti.
Avrei da chiedervi un consiglio, avendo a disposizione un array del tipo:
$numeri=array('20','40','100','250');
ed avendo un numero esterno:
$num_ext="30";
vorrei che venisse preso dall'array il numero che per difetto più si avvicina al numero esterno.
Avete qualche idea a riguardo?
Grazie
-
$numeri=array('20','40','100','250'); $num_ext="30"; $valore = $numeri[0]; foreach ($numeri as $numero) if ($numero < $num_ext && $numero > $valore) $valore = $numero;
-
Grazie funziona alla perferzione
-
l'algoritmo sopra funziona se l'array è composto da numeri ordinati.
se hai un array non ordinato la cosa si complica un pelino, però puoi sempre usare la funzione [url=http://it.php.net/manual/it/function.sort.php]sort prima di usare quell'algoritmo e ti risemplifichi la vita (se puoi riordinarlo).
se devi usare per forza l'array nelle condizioni in cui è (quindi una disposizione casuale dei numeri) puoi fare in questo modo:
l'ho buttato giù al volo, andrebbe provato
$valoreEsame = 30; $pos=-1; $temp=0; $delta = -1; for ($i=0;$i<count($array);$i++) { if ($valoreEsame < $array[$i]) if ($delta < 0) { //la prima volta viene sempre presa in considerazione $delta = $array[$i]-$valoreEsame; $pos=$i; } else if ( ($array[$i]-$valoreEsame) < $delta) ) { //ho trovato un altro valore che ha un delta inferiore e quindi ora è questo l'elemento che mi interessa $delta = $array[$i]-$valoreEsame; $pos=$i; } } if ($pos>0) echo "L'elemento cercato ha valore: ".$array[$pos]." e si trova nella posizione: ".$pos; else echo "Non esiste l'elemento cercato";
-
A meno di sviste particolari l'algoritmo che ho dato funziona anche con numeri non ordinati!
-
prova questo caso:
numero 30
array:
25, 50, 20, 80
in questo caso il numero per difetto più vicino è il 25 ma l'algoritmo riporta il 20.
mi riferivo a questo caso
onestamente non ho ragionato molto quindi non so se ne esistono altri.
non è che si sappia molto dalla specifica, non sappiamo se l'array è ordinato, se è ordinabile, se ha numeri unici o possono essere ripetuti.