繁体   English   中英

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

两个事实:

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

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

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

嗯,这实际上取决于“字符串或数字”的含义(这可能意味着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')可能没有你想象的那样工作。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM