Categorie
PHP

Numeri random multipli di un certo numero con PHP

Oggi ho avuto la necessità per un sito di e-commerce di scrivere una procedura di creazione sconti automatici.
Semplificando molto, quello che deve fare il programma è, applicare a certi prodotti uno sconto casuale (entro un certo range) ma che sia però multiplo di 5, quindi 5-10-15-20% etc..

La funzione rand() di PHP non è sufficiente in quanto non mi permette di gestire il multiplo, ma accetta solo due parametri (min e max) e che io sappia non c’è niente di built-in nel linguaggio che ottenga questo risultato.
Ecco come ho risolto:

    function rndMultipleNumber($min, $max, $multiple)
    {
        $nr = rand($min, $max);
        $leftOver = $nr % $multiple;
        if ($leftOver < (ceil($multiple/2))) {
            return $nr - $leftOver;
        } else {
            return $nr + ($multiple - $leftOver);
        }
    }

Ora i parametri sono tre, ho aggiunto il multiplo. Il fusso della funzione è il seguente:

  1. Genero con rand il numero casuale
  2. Recupero il resto della divisione del numero appena generato con il parametro $multiple
  3. Poi in base al valore del resto lo aggiungo o lo sottraggo al numero random (simulando quindi anche una sorta di arrotondamento)
//Esempio
rndMultipleNumber(5, 20, 5);
/**
5 rimane 5
18 diventa 20
12 diventa 10
*/

Se avete qualche altra idea (magari più "geniele") su come raggiungere lo stesso risultato fatemelo sapere. 😉

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.