数组差异关联数组

时间:2014-02-06 18:08:06

标签: php arrays sorting array-difference

$invitedfrnds0 = Array 
            ( [0] => Array 
                ( 
                    [fb_user_id] => 100000058716604 
                    [accept_status] => 0 
                ) 
             [1] => Array 
                ( 
                    [fb_user_id] => 100000063917115 
                    [accept_status] => 0 
                ) 
            [2] => Array 
                ( 
                    [fb_user_id] => 100000261361844 
                    [accept_status] => 0 
                ) 

            [3] => Array 
                ( 
                    [fb_user_id] => 100005502043347 
                    [accept_status] => 0 
                ) 

            ) 

$invitedfrnds2 =    Array 
                ( 
                    [0] => Array 
                        ( 
                            [fb_user_id] => 100005502043347 
                            [accept_status] => 2 
                        ) 
                )

这里我有两个数组$invitedfrnds0$invitedfrnds2,这两个数组中有一些匹配的fb_user_id,如果发现任何匹配,我需要从第一个数组中删除匹配的记录。之后我需要合并这两个数组

结果数组将看起来像这样。

$resultarray = Array 
                ( [0] => Array 
                    ( 
                        [fb_user_id] => 100000058716604 
                        [accept_status] => 0 
                    ) 
                 [1] => Array 
                    ( 
                        [fb_user_id] => 100000063917115 
                        [accept_status] => 0 
                    ) 
                [2] => Array 
                    ( 
                        [fb_user_id] => 100000261361844 
                        [accept_status] => 0 
                    ) 

                [3] => Array 
                    ( 
                        [fb_user_id] => 100005502043347 
                            [accept_status] => 2 
                    ) 

                ) 

我已经搜索了很多,尝试了一些

 $resultarray = array_diff($invitedfrnds0,$invitedfrnds2); 
 $resultarray = array_map('array_diff_assoc', $invitedfrnds0, $invitedfrnds2);

但是没有做对,请帮我解决这个问题,谢谢

2 个答案:

答案 0 :(得分:0)

您必须使用array_merge_recursive(),而不是array_diff()

array_merge_recursive($invitedfrnds2, $invitedfrnds0);

答案 1 :(得分:0)

使用array_udiff即可实现此目标。

$invitedfrnds0 = array(
    array('fb_user_id' => 100000058716604, 'accept_status' => 0),
    array('fb_user_id' => 100000063917115, 'accept_status' => 0),
    array('fb_user_id' => 100000261361844, 'accept_status' => 0),
    array('fb_user_id' => 100005502043347, 'accept_status' => 0),
);

$invitedfrnds2 = array(
    array('fb_user_id' => 100005502043347, 'accept_status' => 2),
);


// remove all matched values.
$result = array_udiff($invitedfrnds0, $invitedfrnds2, function($a, $b)
    {
    return $a['fb_user_id'] - $b['fb_user_id'];
    });

// add values from the second array.
$result = array_merge($result, $invitedfrnds2);
var_dump($result);