IF条件的奇怪行为

时间:2017-01-30 11:34:52

标签: php if-statement

$a = 101;

if (isset($a) && is_int($a) && in_array($a, range(1, 100))) {
  echo "TRUE";
} else echo "FALSE";

为什么这个条件会返回FALSE,因为它应该是这个IF:

if (isset($argv[1]) && is_int($argv[1]) && in_array($argv[1], range(1, 100))) {
  echo "TRUE";
} else echo "FALSE";

返回FALSE,其中作为第一个参数传递的值为50,其范围为??? PHP-CLI是7.0.9-TS-VC14-x64

提前致谢

1 个答案:

答案 0 :(得分:1)

默认情况下,

argv[1]是一个字符串。 使用is_numeric()代替is_int(),并在检查范围内是否转换(或转换)为整数值。

// var_dump($argv); // ...if you want to check $argv types and values.
if (isset($argv[1]) && is_numeric($argv[1]) && in_array(intval($argv[1]), range(1, 100))) {
  echo "TRUE";
} 
else {
  echo "FALSE";
}

注意 :is_numeric()在浮点值的情况下也会返回TRUE!