array_udiff()筛选器,包含2个键


array_udiff() filter with 2 keys

我需要一个函数来查找相同user_id 的'right'键的更改

在我的例子中,我有两个数组:

$a = array(
    array(
        'user_id' => '367',
        'right' => 'RW',
    ),
    array(
        'user_id' => '48',
        'right' => 'RWD',
    )
);
$b = array(
    array(
        'user_id' => '57',
        'right' => 'RWD',
    ),
    array(
        'user_id' => '367',
        'right' => 'RWD',
    )
);
$result = array_udiff($a, $b, 'myFunc');
$result2 = array_udiff($b, $a, 'myFunc');

现在我必须接收:

$result = array(
    array(
        'user_id' => '367',
        'right' => 'RW',
    )
)
$result2 =  array(
    array(
        'user_id' => '367',
        'right' => 'RWD',
    )
)

我试了很多,但没有得到正确的函数。

有人能帮我吗。

编辑:

我用试试

function myFunc($a, $b){
    if($a['user_id'] == $b['user_id']){
        return strcmp($a['right'], $b['right']);
    }
    return 0;
}

输出为空。更好的解释是用foreach:

function myFunc($a, $b){
 $output = array();
 foreach($a as $_a){
  foreach($b as $_b){
   if($_a['user_id'] == $_b['user_id']){
    if($_a['right'] != $_b['right']){
     $output[] = $_a;
     break;
    }
   }
  }
 }
 return $output;
}
function myFunc($a, $b)
{
    if($a['right'] < $b['right'])
        return -1;
    else if($a['right'] > $b['right'])
        return 1;
    return 0;
}

你是这个意思吗?