CakePHP: i nasıl ata kullanırım :: verilen bir Array Dizilerin alt kümelerini karşılaştırmak içeriyor?

2 Cevap php

: Ben $ usergrouppermissions adında aşağıdaki dizi var

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


[...]

Bir döngü içinde, i $ searchme adlı bu gibi başka bir dizi oluşturmak:

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

)

Belirtilen dizinin üstünde üstündeki sayısal endeksli dizide varsa Şimdi, ben, kontrol etmek istiyorum. Şu anda bunu:

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

Sonuç her zaman yanlıştır. Ben burada yanlış bir şey almak mı? Sorun nedir?

2 Cevap

PH 4.2 in_array'in da iğne olarak diziler kullanabilirsiniz beri. Yani, çözüm şudur:

in_array($searchme, $usergrouppermissions)

Ben bu cevap çok geciktim biliyorum, ama burada gelecek nesiller için zaten nedir :)

Kek şekilde olacaktır:

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

Eğer Set::contains() bunu iyi çalışmaz göreceksiniz kodunda bir göz atın eğer iç içe içeren (en azından sizin durumunuzda).

Set::matches() temelde sadece verilen XPath koşulu ile Set::extract() çağırır ve zevk için bir bool değeri haline sonucu döner.