我有一个值数组,我想检查所有值是字符串还是数字。最有效的方法是什么?
目前我只是检查字符串,所以我只是在做if (array_filter($arr, 'is_string') === $arr)
这似乎正在起作用。
答案 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()
也值得一看:
答案 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)
两个事实:
使用===运算符比is_int / is_string更快,如下所示:
ng-class="{activeLink : activeLink==='PersonalInfo'}"
if ((int)$value === $value) echo "its an int";