用于检查数组是否为数字的PHP代码无效

时间:2013-02-15 15:34:17

标签: php arrays function integer numeric

我有以下PHP:

 <?php

 $array = array("1","2","3");
 $only_integers === array_filter($array,'is_numeric'); // true

 if($only_integers == TRUE)
 {
 echo 'right';
 }

 ?>

由于某种原因,它总是什么都不返回。我不知道我做错了什么。

由于

6 个答案:

答案 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。

http://php.net/array_filter

 if(count($only_integers) == count($array))  {
     echo 'right';
 } else {
     echo 'wrong';
 }

答案 2 :(得分:1)

  1. is_int()会为false返回"1",因为它是一个字符串。
    我看到您现在已经编辑了问题,而是使用is_numeric()代替;这也可能是一个坏主意,因为它会返回true的十六进制和指数值,你可能不想要(例如is_numeric("dead")将返回true)。
    我建议使用{ {1}}而不是。

  2. 三重平等被滥用于此。它用于比较,而不是赋值,因此永远不会设置ctype_digit()。使用单一等于设置$only_integers

  3. $only_integers未返回array_filter() / true值;它返回数组,删除过滤后的值。这意味着false为真的后续检查将无效。

  4. $only_integers。这没关系,但你可能应该在这里使用三重相等。但是,当然,我们已经知道$only_integers == TRUE不会是$only_integerstrue,它将是一个数组,所以实际上我们需要检查它是否包含任何元素。 false会在这里做到这一点。

  5. 这是您的代码的样子,考虑到所有这些......

    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';
}
?>

尝试使用此代码,您就会明白为什么代码无效。