PHPで文字列型になっている数値かどうか判定するには is_numericを使おう

正解

is_numeric()を使います。

www.php.net

<?php

$hoge = "1";
is_numeric($hoge);
> true

$fuga = "fuga";
is_numeric($fuga);
> false

$piyo = "0";
is_numeric($piyo);
> true

NG(最初に書いていたコード)

intval()が変換失敗したときに0を返す、という仕様を使って判定していました。が、"0"が判定できていません。これではだめですね。

成功時は value の整数値、失敗時は 0。 空の配列の場合は 0、空でない配列の場合は 1 を返します。

www.php.net

<?php

$hoge = "1";
intval($hoge) !== 0;
> true

$fuga = "fuga";
intval($fuga) !== 0;
> false

$piyo = "0";
intval($piyo) !== 0;
> false