PHP检查是否有任何数组值不是字符串或数字?

时间:2012-02-06 21:41:22

标签: php arrays string validation array-filter

我有一个值数组,我想检查所有值是字符串还是数字。最有效的方法是什么?

目前我只是检查字符串,所以我只是在做if (array_filter($arr, 'is_string') === $arr)这似乎正在起作用。

7 个答案:

答案 0 :(得分:8)

请参阅:PHP的is_string()is_numeric()函数。

结合array_filter,您可以比较两个数组,看它们是否相等。

function isStringOrNumeric($in) {
// Return true if $in is either a string or numeric
   return is_string($in) || is_numeric($in);
}

class Test{}

$a = array( 'one', 2, 'three', new Test());
$b = array_filter($a, 'isStringOrNumeric');

if($b === $a)
    echo('Success!');
else
    echo('Fail!');

答案 1 :(得分:7)

更有效的是:

function isStringNumberArray( $array){
  foreach( $array as $val){
    if( !is_string( $val) && !is_numeric( $val)){
      return false;
    }
  }
  return true;
}

此方法:

  • 不会创建新数组
  • 将在第一个无效值
  • 后停止

答案 2 :(得分:3)

如果您希望单个运行数组,可以编写自己的函数来根据特定条件检查每个值。类似的东西:

function is_string_or_numeric($var)
{
    return is_string($var) || is_numeric($var);
}

然后你可以过滤你的数组:

if (array_filter($arr, 'is_string_or_numeric') === $arr)

答案 3 :(得分:2)

PHP的ctype函数,特别是ctype_alpha()ctype_digit()也值得一看:

http://php.net/manual/en/book.ctype.php

答案 4 :(得分:0)

嗯,这实际上取决于“字符串或数字”的含义(这可能意味着is_numeric(X),或is_int(X) || is_string(X),或任何其他数量的东西)。可能最有效的方式(虽然它更详细)是:

public function isValid(array $array) {
    $valid = TRUE;

    foreach ($arr as $value) {
        if (!is_int($value) && !is_string($value)) {
            $valid = FALSE;
            break;
        }
    }

    return $valid;
}

答案 5 :(得分:0)

这个问题的答案很多。如果你想使用你一直在使用的方法,你将需要为此编写自己的函数。

因此,对于数组中的每个元素,您将检查它是否为数字:

function isNumber($array_element) {
    return is_numeric($array_element);
}

然后使用array_filter

调用该测试函数
if (array_filter($arr, 'is_number')  {
  // is a number code here.
}

你写过函数'is_string()'吗?如果没有,array_filter($arr, 'is_string')可能无法按您认为的那样工作。)。

答案 6 :(得分:0)

两个事实:

  • foreach比array_map()更快,因为它不会在每次迭代时调用一个函数
  • 使用===运算符比is_int / is_string更快,如下所示:

    ng-class="{activeLink : activeLink==='PersonalInfo'}"

    if ((int)$value === $value) echo "its an int";