PHP检查某些键或值是否在多维数组中

时间:2013-05-29 07:46:39

标签: php arrays validation recursion multidimensional-array

我有一个数组结构,我想检查数组中某处是否存在键/值。但我想以这样一种方式进行测试,即我制作一个几乎镜像的验证数组。

假设我有一个多维数组。这是我要验证的数据。

Array
(
[key1] => Array
    (
        [subkey1] => value
        [subkey2] => value
    )

[key2] => Array
    (
        [subkey3] => Array
            (
                [key1] => value
                [key2] => value
                [key3] => value
                [key4] => value
                [key5] => value
                [key6] => value
            )
    )
);

这是我的键和值的数组,需要出现在第一个数组中。

Array
(
[key1] => Array
    (
        [subkey2] => value
    )

[key2] => Array
    (
        [subkey3] => Array
            (
                [key5] => value
                [key6] => value
            )
    )
);

我无法比较两个阵列,因为它们永远不会相同。但我需要以某种方式运行数据数组并验证验证数组。密钥和值都需要在正确的位置,密钥需要相同的名称,值也应该相同。我只是不确定如何做出体面的检查。我可以进行一些递归检查吗?由于某些键可能是一个值或另一个数组,因此它也需要检查这个...这就是为什么我在思考递归但我不知道如何制作它。 / p>

希望你能提供帮助。感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用它来递归确定是否存在所有必需的键:

function has_recursive($data, $required)
{
    foreach ($required as $key => $value) {
        if (!isset($data[$key])/* && $data[$key] === $value */) {
            return false;
        }
        if (is_array($data[$key]) && false === has_recursive($data[$key], $value)) {
            return false;
        }
    }
    return true;
}

has_recursive($data, $required); // false or true

答案 1 :(得分:0)

我没有测试过,所以也许这不起作用(如果是这样,这将无济于事我会删除答案)。

第一种方法是递归检查每个键值对,然后查找匹配的内容。

第二个选项可以是使用array_values()array_keys()递归创建平键 - 值数组。我的意思是来自

array(
  'subkey1' = array(
     'key1' = value1,
     'key2' = value2),
  'subkey2' = value3
)

你迭代地和递归地做

array(
  'key1' = value1,
  'key2' = value2,
  'subkey2' = value3
)

如果对比较两个数组执行此操作,则可以使用array_intersect_assoc()找到匹配的键值对。

但是,如果例如'key1' == 'subkey2',则无效。