一尘不染

更简洁的检查数组是否仅包含数字(整数)的方法

php

如何验证数组仅包含整数值?

我希望能够检查一个数组,并最终得到一个布尔值,true如果该数组仅包含整数并且该数组中false是否还有其他字符。我知道我可以遍历数组并单独检查每个元素,然后返回truefalse取决于非数字数据的存在:

例如:

$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功能呢?

注意:对于我当前的任务,我只需要验证一维数组。但是,如果有一种可以递归工作的解决方案,那么我将不胜感激。


阅读 322

收藏
2020-05-26

共1个答案

一尘不染

$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();
}
2020-05-26