Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于验证n级数组元素的PHP函数_Php_Arrays_Multidimensional Array - Fatal编程技术网

用于验证n级数组元素的PHP函数

用于验证n级数组元素的PHP函数,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我已经尝试过谷歌,并尝试自己得到以下功能完成。我需要一个函数来验证每个数组元素是否为标量。因此,我编写了一个简单的函数,它将迭代数组的每个元素,并检查是否存在标量 但根据实际需求,阵列可以是多维阵列。所以我修改了数组并递归调用了函数,如下所示,但它不会遍历数组中的所有元素 function validate_scalar($params) { foreach ($params as $key => $arg) { if (is_array($arg))

我已经尝试过谷歌,并尝试自己得到以下功能完成。我需要一个函数来验证每个数组元素是否为标量。因此,我编写了一个简单的函数,它将迭代数组的每个元素,并检查是否存在标量

但根据实际需求,阵列可以是多维阵列。所以我修改了数组并递归调用了函数,如下所示,但它不会遍历数组中的所有元素

function validate_scalar($params)
{
    foreach ($params as $key => $arg)
    {
        if (is_array($arg))
        {
            validate_scalar($arg);
        }
        else
        {
            if (!is_scalar($arg))
            {
                  // throwing an exception here if not scalar.
            }
        }
    }
    return true;
}
是否有任何方法可以实现此功能?请在这方面帮助我。

您可以使用以下内容:

<?php

$array = array(
    'kalle' => 'asdf', 
    'anka' => array(
        123, 
        54324, 
        new stdClass()
    )
);

array_walk_recursive($array, function ($item, $key) {
    if (!is_scalar($item)) {
        echo $key . " =>  : Is not scalar\n";
        return false;
    }
    echo $key . " =>  : Is scalar\n";
    return true;
});

函数声明中缺少static,或者self::validate_标量中的self错误。谢谢。我刚刚修改了示例代码。array\u walk\u recursive递归地遍历每个不是数组的项,并对它们执行回调/函数。嗯,您能解释一下“不遍历数组的所有元素”是什么意思吗?我按原样测试了代码,它捕获了PHP不认为是标量(数组、资源、对象)的所有内容。问题是什么?当我在注释所在的位置添加一个
throw
时,您的原始代码可以工作。
kalle =>  : Is scalar
0 =>  : Is scalar
1 =>  : Is scalar
2 =>  : Is not scalar