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
randil 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. 😉