2

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

可以说我有一个多维数组。这是我要验证的数据。

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
            )
    )
);

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

希望你能帮忙。谢谢。

4

2 回答 2

3

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

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
于 2013-05-29T09:00:41.813 回答
0

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

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

array_values()第二个选项可以是您使用and递归地创建平面键值数组array_keys()。我的意思是从类似的东西

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

你迭代和递归地做

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

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

但是,例如,这将不起作用'key1' == 'subkey2'

于 2013-05-29T08:12:24.067 回答