array_udiff()过滤器有2个键

时间:2015-05-29 15:31:54

标签: php arrays

我需要一个功能来查找“权利”中的变化。同一个user_id的密钥

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

$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;
}

1 个答案:

答案 0 :(得分:1)

function myFunc($a, $b)
{
    if($a['right'] < $b['right'])
        return -1;
    else if($a['right'] > $b['right'])
        return 1;

    return 0;
}

你是说这个吗?