gestire numeri

  • Creatore Discussione Creatore Discussione Valshy
  • Data di inizio Data di inizio

Valshy

Nuovo Utente
14 Mag 2011
23
0
0
Ciao a tutti, vorrei chiedervi se una cosa è fattibile o meno.

Nel mio database ho un campo all'interno della tabella utente, un campo che chiamiamo valore_principale e che è int 11. Questo campo contiene un dato che può andare da 3 ad infinito. Questo numero mi serve per determinare un bonus.
Faccio un esempio:

Valore_principale=3 --> Bonus=1
Valore_principale=4 --> Bonus=1
Valore_principale=5 --> Bonus=2
Valore_principale=5 --> Bonus=2
Valore_principale=6 --> Bonus=3
Valore_principale=6 --> Bonus=3

Come si nota il valore bonus va avanti di due in due. Potrei usare uno switch ma con un numero potenzialmente infinito è impossibile, esiste un altro metodo?
 
Puoi fare per esempio cosi:
PHP:
<?php

$a = range(3,200);

foreach($a as $value)
{
	$bonus = ceil(($value-2)/2);
	echo 'Valore: '.$value.', bonus: '.$bonus.'<br />';
}

?>
 
Un'alternativa potrebbe essere quella di determinare il valore di offset con SELECT MAX determinando il secondo argomento da passare a range().
 
ciao
piccola osservazione
PHP:
<?php
$a = range(3,10);
foreach($a as $value)
{
    $bonus = ceil(($value-2)/2);
    echo 'Valore: '.$value.', bonus: '.$bonus.'<br />';
}
?>

output

Valore: 3, bonus: 1 ok
Valore: 4, bonus: 1 ok
Valore: 5, bonus: 2 ok
Valore: 6, bonus: 2 !!! attenzione: valshy diceva Valore_principale=6 --> Bonus=3
Valore: 7, bonus: 3 questi non so
Valore: 8, bonus: 3
Valore: 9, bonus: 4
Valore: 10, bonus: 4
 
ciao
questa, secondo me, corrisponde meglio a quanto richiesto
PHP:
<?php
$a = range(3,10);//qui come diceva eliox mettere il $max al posto di 10
foreach($a as $value){
	if($value%2 == 0){
		$bonus=(int)(($value-1)/2);
	}else{
		$bonus=(int)($value/2);
	}
	echo 'Valore: '.$value.', bonus: '.$bonus.'<br />';
}
?>
output
Valore: 3, bonus: 1
Valore: 4, bonus: 1
Valore: 5, bonus: 2
Valore: 6, bonus: 2
Valore: 7, bonus: 3
Valore: 8, bonus: 3
Valore: 9, bonus: 4
Valore: 10, bonus: 4
 
ciao
questa, secondo me, corrisponde meglio a quanto richiesto
PHP:
<?php
$a = range(3,10);//qui come diceva eliox mettere il $max al posto di 10
foreach($a as $value){
	if($value%2 == 0){
		$bonus=(int)(($value-1)/2);
	}else{
		$bonus=(int)($value/2);
	}
	echo 'Valore: '.$value.', bonus: '.$bonus.'<br />';
}
?>
output
Il tuo codice produce esattamente lo stesso risultato che il mio. Per quanto riguarda la funzione range(), era solo per fare esempio. Il punto chiave era la formula "$bonus = ceil(($value-2)/2);" per ricavare il bonus partendo dal valore_principale. Non credo che a Valshy serve una funzione range() con il massimo ricavato con SELECT MAX. Penso che voleva solo sapere quale il bonus dopo aver preso un certo valore dal database. Almeno cosi ho capito io ;).
Credo anche che
Valore_principale=3 --> Bonus=1
Valore_principale=4 --> Bonus=1
Valore_principale=5 --> Bonus=2
Valore_principale=5 --> Bonus=2
Valore_principale=6 --> Bonus=3
Valore_principale=6 --> Bonus=3
era pensato come
Valore_principale=3 --> Bonus=1
Valore_principale=4 --> Bonus=1
Valore_principale=5 --> Bonus=2
Valore_principale=6 --> Bonus=2
Valore_principale=7 --> Bonus=3
Valore_principale=8 --> Bonus=3
perché altrimenti non si spiega la ripetizione della stessa riga due volte.
 

Discussioni simili