• User Attivo

    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 🙂


  • User Attivo
    
    $numeri=array('20','40','100','250'); 
    
    $num_ext="30"; 
    
    $valore = $numeri[0];
    foreach ($numeri as $numero)
      if &#40;$numero < $num_ext && $numero > $valore&#41;
        $valore = $numero;
    
     
    

  • User Attivo

    Grazie funziona alla perferzione :sbav:


  • Super User

    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 &#40;$i=0;$i<count&#40;$array&#41;;$i++&#41;
    &#123;
    	if &#40;$valoreEsame < $array&#91;$i&#93;&#41;
    		if &#40;$delta < 0&#41;
    		&#123;
    		  	//la prima volta viene sempre presa in considerazione
    			$delta = $array&#91;$i&#93;-$valoreEsame;
    			$pos=$i;
    		&#125;
    		else if &#40; &#40;$array&#91;$i&#93;-$valoreEsame&#41; < $delta&#41; &#41;
    		&#123;
    		  //ho trovato un altro valore che ha un delta inferiore e quindi ora è questo l'elemento che mi interessa
    			$delta = $array&#91;$i&#93;-$valoreEsame;
    			$pos=$i;
    		&#125;
    &#125;
    
    if &#40;$pos>0&#41;
      	echo "L'elemento cercato ha valore: ".$array&#91;$pos&#93;." e si trova nella posizione&#58; ".$pos;
    else
    	echo "Non esiste l'elemento cercato";
    
    

  • User Attivo

    A meno di sviste particolari l'algoritmo che ho dato funziona anche con numeri non ordinati!


  • Super User

    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.
    :ciauz: