Modulo funktion

Hallo,

ich habe eine Methode (sieht unten) geschrieben, die eine Zahl zurück liefert soll die immer durch 5 teilbar ist. Es funktioniert soweit, aber ich finde sie nicht praktisch. Wenn anstatt fünf, tausend wäre hätte ich eine lange switch-case-Anweisung.

Gibt’s in PHP eine Funktion die mir das ganze erledigt kann?

Mfg

function ($x){
$rest = $x % 5;
switch ($rest){
case 1:
$x += 4;
break;
case 2:
$x+= 3;
break;
case 3:
$x+= 2;
break;
case 4:
$x+= 1;
break;
default:
break;
}
return $x;
}

Gibt’s in PHP eine Funktion die mir das ganze erledigt kann?

die funktionhast du ja schon, also musst du nur vereinfachen, weil wenn du dir das angugst wiederholt sich das nach einem schema :

function ($x){

$rest = $x % 5;

ergibt wohl 0,1,2,3,4

switch ($rest){
case 1:
$x += 4;

wie erhalte ich die 4 ?
Naja wenn ich 5 hab und 1 abziehe hab ich vier, wo ist die 1 im case

break;
case 2:
$x+= 3;

wie krieg ich die 3 , also wenn ich die 5 hab und 2 abziehe hab ich 3 die steht im case

setzen wir mal case ein als variable also $rest

$x+= 5 - $rest

$rest ersetzen wir durch die formel oben

$x+= 5 - ( $x % 5)

da wir aber auch mal nach 1000er teiler suchen machen wir aus der 5 eine variable

$x+= $teiler - ($x % $teiler)

dann lösen wir noch das += auf

$x + ( $teiler - ( $x % $teiler ) )

$teiler sieht doof aus also $m für modulo oder so :smile:

$x + ( $m - ( $x % $m ) )

schreiben wir also nicht

return $x;

sondern

function ($x,$m) {
return $x + ( $m - ( $x % $m ) );
}

das problem ist nun nur noch der 0 case
das kann man mit if im return erledigen

vergleich ? wahr : falsch

function ($x,$m) {
return ($x % $m == 0) ? $x : ($x + ( $m - ( $x % $m ) )) ;
}

gruss iacta aLea est

Danke schön Lacta alea est!