如何验证数组是否只包含整数值?
如果数组只包含整数,我希望能够检查一个数组,最后得到布尔值为true
,如果数组中有任何其他字符,则为false
。我知道我可以遍历数组并单独检查每个元素并返回true
或false
,具体取决于是否存在非数字数据:
例如:
$only_integers = array(1,2,3,4,5,6,7,8,9,10);
$letters_and_numbers = array('a',1,'b',2,'c',3);
function arrayHasOnlyInts($array)
{
foreach ($array as $value)
{
if (!is_int($value)) // there are several ways to do this
{
return false;
}
}
return true;
}
$has_only_ints = arrayHasOnlyInts($only_integers ); // true
$has_only_ints = arrayHasOnlyInts($letters_and_numbers ); // false
但是有没有更简洁的方法来使用我没有想到的本机PHP功能呢?
注意:对于我当前的任务,我只需要验证一维数组。但如果有一个递归工作的解决方案,我会很感激地看到它。
答案 0 :(得分:53)
$only_integers === array_filter($only_integers, 'is_int'); // true
$letters_and_numbers === array_filter($letters_and_numbers, 'is_int'); // false
将来可以帮助您定义两个辅助,高阶函数:
/**
* Tell whether all members of $array validate the $predicate.
*
* all(array(1, 2, 3), 'is_int'); -> true
* all(array(1, 2, 'a'), 'is_int'); -> false
*/
function all($array, $predicate) {
return array_filter($array, $predicate) === $array;
}
/**
* Tell whether any member of $array validates the $predicate.
*
* any(array(1, 'a', 'b'), 'is_int'); -> true
* any(array('a', 'b', 'c'), 'is_int'); -> false
*/
function any($array, $predicate) {
return array_filter($array, $predicate) !== array();
}
答案 1 :(得分:7)
<?php
$only_integers = array(1,2,3,4,5,6,7,8,9,10);
$letters_and_numbers = array('a',1,'b',2,'c',3);
function arrayHasOnlyInts($array){
$test = implode('',$array);
return is_numeric($test);
}
echo "numbers:". $has_only_ints = arrayHasOnlyInts($only_integers )."<br />"; // true
echo "letters:". $has_only_ints = arrayHasOnlyInts($letters_and_numbers )."<br />"; // false
echo 'goodbye';
?>
答案 2 :(得分:5)
总是有array_reduce():
array_reduce($array, function($a, $b) { return $a && is_int($b); }, true);
但我最喜欢最简洁的解决方案(这是你提供的)。
答案 3 :(得分:5)
另一种选择,虽然可能比这里发布的其他解决方案慢:
function arrayHasOnlyInts($arr) {
$nonints = preg_grep('/\D/', $arr); // returns array of elements with non-ints
return(count($nonints) == 0); // if array has 0 elements, there's no non-ints
}
答案 4 :(得分:4)
function arrayHasOnlyInts($array) {
return array_reduce(
$array,
function($result,$element) {
return is_null($result) || $result && is_int($element);
}
);
}
如果数组只有整数,则返回true;如果至少一个元素不是整数,则返回false;如果数组为空,则返回 null。
答案 5 :(得分:0)
为什么我们不去看看例外?
接受任何内置数组函数,该函数接受用户回调(array_filter()
,array_walk()
,甚至排序函数如usort()
等)并在回调中抛出异常。例如。对于多维数组:
function arrayHasOnlyInts($array)
{
if ( ! count($array)) {
return false;
}
try {
array_walk_recursive($array, function ($value) {
if ( ! is_int($value)) {
throw new InvalidArgumentException('Not int');
}
return true;
});
} catch (InvalidArgumentException $e) {
return false;
}
return true;
}
这当然不是最简洁,但却是一种多功能的方式。