我有一个值数组,我想检查所有值是否都是字符串或数字。最有效的方法是什么?
目前我只是在检查字符串,所以我只是在做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";