Controle op gehele getallen
Uit Yapf
Vooraf, welke toepassing?
Er zijn meerdere redenen waarom je zou kunnen willen weten of iets een geheel getal is. Welk doel je hebt bepaalt welke methode je moet gebruiken omdat elke methode zijn voor- en nadelen heeft.
Controleren of (formulier)invoer wel een geheel getal is.
Om te zien of invoer, bijvoorbeeld een getal uit een formulier, wel een geheel getal is gebruik je ctype_digit(). Deze functie controleert of een string(!) in PHP alleen cijfers bevat. De variabele die je aan ctype_digit() aanbiedt moet dus van het string type zijn. Als je een integer aanbied krijgt je altijd false, ookal is een integer een geheel getal. Dat omzetten naar een string gaat het eenvoudigst via een typecast, "(string)" voor de variabele.
<?php // Typecast $variabele met (string) if (ctype_digit( (string) $variabele)) { echo 'het is een geheel getal'; } else { echo 'het is geen geheel getal'; } ?>
Om-en-om wisselen
Een andere toepassing waarvoor je zou kunnen willen controleren of iets een geheel getal is is om bijvoorbeeld tijdens het presenteren van resultaten elke 5e rij een kleurtje te geven. De theorie is dan: rijnummer /5 = geheel getal. Deze theorie is wiskundig correct maar daar is al een functie voor in PHP: de modulo, het % teken. Dit si een wiskundige berekening die aangeeft wat de rest is als je het ene getal deelt door het andere. 4 gedeeld door 5 geeft rest nul, 6 gedeeld door 5 geeft rest 1, want 5 pas 1x in 6 en dan blijft er nog 1 over.
<?php echo 5%5; echo 4%5; echo 6%5; ?>
Als de modulo een rest=0 oplevert past het ene getal een geheel aantal keer in het ander, dan he je dus het 'de zoveelste rij' te pakken.
Hoe niet?
Een veelgemaakte denkfout is om is_numeric() te gebruiken, omdat de naam ten onrechte wordt gelezen als 'is een geheel getal', maar de naam getekent niets meer dan 'is een getal', niet een 'geheel' getal. Het getal 1,8 is ook numeric, maar bepaald geen geheel getal.