我有以下PHP:
<?php
$array = array("1","2","3");
$only_integers === array_filter($array,'is_numeric'); // true
if($only_integers == TRUE)
{
echo 'right';
}
?>
由于某种原因,它总是什么都不返回。我不知道我做错了什么。
由于
答案 0 :(得分:2)
is_int
检查变量的实际类型,在您的情况下为string
。无论变量类型如何,都使用is_numeric
作为数值。
请注意,以下值均被视为“数字”:
"1"
1
1.5
"1.5"
"0xf"
"1e4"
即。任何浮点数,整数或字符串,它们都是浮点数或整数的有效表示。
编辑:此外,您可能误解了array_filter
,它不会返回true或false,而是一个新数组,其中包含回调函数返回true的所有值。尽管如此if($only_integers)
仍然有效(修复了赋值运算符之后),因为所有非空数组都被认为是“true-ish”。
编辑2:,正如@SDC指出的那样,如果您只想允许十进制格式的整数,则应使用ctype_digit
。
答案 1 :(得分:2)
您必须将原始数组的长度与过滤后的数组的长度进行比较。 array_filter函数返回一个数组,其值与筛选器设置为true。
if(count($only_integers) == count($array)) {
echo 'right';
} else {
echo 'wrong';
}
答案 2 :(得分:1)
is_int()
会为false
返回"1"
,因为它是一个字符串。
我看到您现在已经编辑了问题,而是使用is_numeric()
代替;这也可能是一个坏主意,因为它会返回true
的十六进制和指数值,你可能不想要(例如is_numeric("dead")
将返回true)。
我建议使用{ {1}}而不是。
三重平等被滥用于此。它用于比较,而不是赋值,因此永远不会设置ctype_digit()
。使用单一等于设置$only_integers
。
$only_integers
未返回array_filter()
/ true
值;它返回数组,删除过滤后的值。这意味着false
为真的后续检查将无效。
$only_integers
。这没关系,但你可能应该在这里使用三重相等。但是,当然,我们已经知道$only_integers == TRUE
不会是$only_integers
或true
,它将是一个数组,所以实际上我们需要检查它是否包含任何元素。 false
会在这里做到这一点。
这是您的代码的样子,考虑到所有这些......
count()
答案 3 :(得分:0)
使用===
更改=
,用于比较初始化变量
<?php
$array = array(1,2,3);
$only_integers = array_filter($array,'is_int'); // true
if($only_integers == TRUE)
{
echo 'right';
}
?>
答案 4 :(得分:0)
您是否尝试在发布前运行代码?我有这个错误:
Notice: Undefined variable: only_integers in ~/php/test.php on line 4
Notice: Undefined variable: only_integers in ~/php/test.php on line 6
将===
更改为=
可立即解决问题。你最好学习如何使用phplint和其他工具来避免像这样的拼写错误。
答案 5 :(得分:-1)
<?php
$test1 = "1";
if (is_int($test1) == TRUE) {
echo '$test1 is an integer';
}
$test2 = 1;
if (is_int($test2) == TRUE) {
echo '$test2 is an integer';
}
?>
尝试使用此代码,您就会明白为什么代码无效。