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

2 つの配列が同じになることはないため、これらを比較することはできません。しかし、何らかの方法でデータ配列を実行し、検証配列に対して検証する必要があります。キーと値の両方が正しい場所にある必要があり、キーは同じ名前である必要があり、値も同じである必要があります。まともなチェックを行う方法がわかりません。再帰的なチェックを行うことはできますか? 一部のキーは値または別の配列である可能性があるため、これもチェックする必要があります...そのため、再帰を考えていますが、その方法がわかりません。

お役に立てれば幸いです。ありがとう。

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 に答える