CakePHP: Как я могу использовать Set :: contains, чтобы сравнить подмножества массивов с заданным массивом? - PullRequest
0 голосов
/ 08 апреля 2009

У меня есть следующий массив с именем $ usergrouppermissions:

Array
(
    [0] => Array
        (
            [UserGroupPermission] => Array
                (
                    [group_id] => 1
                    [permission_id] => 4
                )

        )

    [1] => Array
        (
            [UserGroupPermission] => Array
                (
                    [group_id] => 1
                    [permission_id] => 5
                )

        )

    [2] => Array
        (
            [UserGroupPermission] => Array
                (
                    [group_id] => 1
                    [permission_id] => 6
                )

        )

    [3] => Array


[...]

В цикле я создаю еще один массив с именем $ searchme:

Array
(
    [UserGroupPermission] => Array
        (
            [permission_id] => 1
            [group_id] => 1
        )

)

Теперь я хочу проверить, существует ли указанный выше массив в числовом индексированном массиве сверху. В настоящее время я делаю это:

$result = Set::contains($usergrouppermissions, $searchme);

Результат всегда ложный. Я что-то здесь не так понимаю? В чем проблема?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2009

Я знаю, что очень опаздываю с этим ответом, но в любом случае это для будущих поколений:)

Пирог будет:

$exists = Set::matches
    (
        sprintf
        (
            '/UserGroupPermission[group_id=%s][permission_id=%s]',
            $searchme['UserGroupPermission']['group_id'],
            $searchme['UserGroupPermission']['permission_id']
        ),
        $usergrouppermissions
    );

Если вы посмотрите на код Set::contains(), то увидите, что он плохо работает с вложенными контейнерами (по крайней мере, в вашем случае).

Set::matches() в основном просто вызывает Set::extract() с заданным условием XPath и превращает результат в значение bool для вашего удовольствия.

0 голосов
/ 08 апреля 2009

Поскольку PH 4.2 in_array может также использовать массивы в качестве иглы. Итак, решение таково:

in_array($searchme, $usergrouppermissions)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...