2009-04-08 2 views
0

私は次の配列は、名付けている$ usergrouppermissions:与えられた場合、私は、チェックしたい、今すぐCakePHP:Set :: containsを使用して、配列のサブセットを指定された配列と比較するにはどうすればよいですか?

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

) 

:ループでは

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を構築します上記の配列は、数値の配列の先頭に存在します。私は現在これを行います:

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

結果は常にfalseです。私はここで何か間違っていますか?何が問題ですか?

答えて

0

PH 4.2 in_arrayは配列を針として使用することもできるため、だから、解決策はこれです:

in_array($searchme, $usergrouppermissions) 
0

私は非常に遅く、この答えを持つんだけど、ここではそれが将来の世代のためにとにかくです:)

ケーキの方法は次のようになります。

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

Set::contains()のコードを見ると、少なくともあなたの場合は入れ子になっているとうまく動作しないことがわかります。

Set::matches()は、基本的にはXPath条件を指定してSet::extract()を呼び出し、結果をbool値に変えます。

関連する問題