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:
- Genero con
rand
il numero casuale - Recupero il resto della divisione del numero appena generato con il parametro
$multiple
- 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. 😉