It compares type and value rather than just value. For more information, see this manual page: [man]language.operators.comparison[/man].
Also, you've got the same problem still; a value of 0 is considered "empty."
And yeah, you're probably validating form inputs or something like that, which are always passed as strings. In that case, you'd have to use [man]is_numeric/man which is specifically designed to examine strings and determine if their values are numeric or not. Note that is_numeric() also allows hexadecimal numbers, so if you strictly want to know if the string is an integer (and not a decimal, in which case you could use [man]ctype_digit/man), you could do something like:
if((int)$problemId.'' === $problemId.'')