2012-02-10 8 views
1

私は権限レベルのシステムなので、配列から私のpreviosの選択された権限を削除する必要があります。たとえば:PHPがarray_diff_assoc()のためにinverseを返し、重複した値を削除しました

My permissions: read, write 
All permissions: read, write, update, delete 
I need return: update, delete 

問題:array_diff_assoc()は、正確なキーを比較し、[0] = [0]、私は値ではないキーを比較して、私&過去の選択の権限ではなく、削除された値、なしにすべての権限を返す必要があります。

res['all_withou_pre_selected_permissions'] = array_diff_assoc($all_permissions,$res['my_permissions']); 
print_r($res['all_withou_pre_selected_permissions']); 

マイ配列と戻り

My permissions 
array(2) { 
    [0]=> 
    array(6) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(9) "Adicionar" 
    [1]=> 
    string(9) "Adicionar" 
    ["Nome"]=> 
    string(3) "kin" 
    [2]=> 
    string(3) "kin" 
    } 
    [1]=> 
    array(6) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(7) "Excluir" 
    [1]=> 
    string(7) "Excluir" 
    ["Nome"]=> 
    string(3) "kin" 
    [2]=> 
    string(3) "kin" 
    } 
} 

All Permissions 
array(8) { 
    [0]=> 
    array(4) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(9) "Adicionar" 
    [1]=> 
    string(9) "Adicionar" 
    } 
    [1]=> 
    array(4) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(6) "Editar" 
    [1]=> 
    string(6) "Editar" 
    } 
    [2]=> 
    array(4) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(7) "Excluir" 
    [1]=> 
    string(7) "Excluir" 
    } 
    [3]=> 
    array(4) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(3) "Ler" 
    [1]=> 
    string(3) "Ler" 
    } 

Return of PHP code 

array(6) { 
    [2]=> 
    array(4) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(7) "Excluir" 
    [1]=> 
    string(7) "Excluir" 
    } 
    [3]=> 
    array(4) { 
    ["Modulo"]=> 
    string(15) "Administradores" 
    [0]=> 
    string(15) "Administradores" 
    ["Tipo"]=> 
    string(3) "Ler" 
    [1]=> 
    string(3) "Ler" 
    } 

答えて

1

あなたがarray_diffを使用することはできません何らかの理由はありますか?

$my = array('read', 'write'); 
$all = array('read', 'write', 'update', 'delete'); 

var_dump(array_diff($all, $my)); 

出力:

array(2) { 
    [2]=> 
    string(6) "update" 
    [3]=> 
    string(6) "delete" 
} 
+0

間違ってこれを試してください:<?phpの $私=配列( 配列( 'モジュール' => '管理者'、 '許可' => '書き込み')、 配列( 'モジュール' => '管理者'、' Permission '=>' read ') ); エコー '

'; print_r($my); echo '
'; array( 'Module' => 'Administrator'、 'Permission' => 'update')$ ALL = array( array( 'Module' => '管理者'、 '許可' => '書き込み')、 ( 'モジュール' => '管理者'、 '許可' => '削除')、 アレイ( 'モ​​ジュール' => '管理者'、 '許可' => '削除') ); エコー '
'; print_r($all); echo '
'; var_dump(array_diff($ all、$ my)); ?> – user1149440

0

2つの配列の組合

$union = array_unique(array_merge($arr1, $arr2)); 

それらのintersection

$intersect = array_intersect($arr1, $arr2); 

違い

$diff = array_diff($arr1, $arr2); 

対称型の違いsource

$sym_diff = array_merge(array_diff($arr1, $arr2), array_diff($arr2, $arr1)); 

別の可能性は、単純なFilterIteratorを書くことであろう。

Google SERPsに他の質問はありませんでしたので、私はこの古い質問に対して答えを残しています。

関連する問題