Just a quick follow-up to my post on is_numeric vs. ctype_digit. There is one quirk with ctype_digit that may affect your choice about whether to use it.
When the string in question is empty, ctype_digit returns TRUE. However, when it is null, ctype_digit will return FALSE.
She includes code to illustrate, noting the return of each function.