1

I haver permissions levels system, so i need remove from my array my previos selected permissions. For example:

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

The problem: array_diff_assoc() compare exact keys, [0] = [0], i need compare values not keys, and return all permission without, my previos selected permissions, not removed values.

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

My arrays and return

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"
  }
phihag
  • 278,196
  • 72
  • 453
  • 469
Kin
  • 128
  • 9

2 Answers2

1

The union of two arrays:

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

The intersection of them:

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

The difference :

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

The symetric difference source:

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

Another possibility would be to write a simple FilterIterator.

As there was no other question in the Google SERPs, I'm leaving an answer on this old question.

kaiser
  • 21,817
  • 17
  • 90
  • 110
1

Is there any reason you can't use array_diff?

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

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

Output:

array(2) {
  [2]=>
  string(6) "update"
  [3]=>
  string(6) "delete"
}
nickb
  • 59,313
  • 13
  • 108
  • 143
  • Wrong try this: 'Administrator', 'Permission'=>'write'), array('Module'=>'Administrator', 'Permission'=>'read') ); echo '
    ';
    print_r($my);
    echo '
    '; $all = array( array('Module'=>'Administrator', 'Permission'=>'write'), array('Module'=>'Administrator', 'Permission'=>'update'), array('Module'=>'Administrator', 'Permission'=>'remove'), array('Module'=>'Administrator', 'Permission'=>'read') ); echo '
    ';
    print_r($all);
    echo '
    '; var_dump( array_diff( $all, $my)); ?>
    – Kin Feb 11 '12 at 00:29