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


PHP check if any array value is not a string or numeric?

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

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

请参阅: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!');

更有效的方法是:

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

这种方法:

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

如果您想在数组中进行一次运行,您可以编写自己的函数来根据您的特定条件检查每个值。类似于:

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

然后你可以过滤你的阵列像:

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

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

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

好吧,这实际上取决于你所说的"字符串或数字"的意思(这可能意味着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;
}

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

因此,对于数组中的每个元素,你都要检查它是否是一个数字:

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')可能不会像你想象的那样工作。)。

两个事实:

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

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

    if ((string)$value === $value) echo "its a string";