Peter
Peter

Reputation: 1296

PHP Compare 2 multidimensional arrays and remove duplicate based on key value

I have 2 arrays e.g.

OldMembers:

Array (
  [0] => Array
    (
        [time] => 1361612421
        [memberid] => 90
    )

  [1] => Array
    (
        [time] => 1361614422
        [memberid] => 96
    )

  [2] => Array
    (
        [time] => 1361617423
        [memberid] => 108
    )
)

and NewMembers

Array (
  [0] => Array
    (
        [time] => 1361618411
        [memberid] => 103
    )

  [1] => Array
    (
        [time] => 1361618443
        [memberid] => 129
    )
  [2] => Array
    (
        [time] => 1361618463
        [memberid] => 96
    )
)

What is the best way to remove duplicates from NewMembers based on key memberid ? E.g. in this case I need removed second array from NewMembers because memberid 96 already exist in OldMembers on position 1... and I just need that instance removed from NewMembers array ?

Upvotes: 0

Views: 3558

Answers (2)

lauriys
lauriys

Reputation: 4792

Not the best answer for sure, but if nobody else will propose anything, at least you will have that.

foreach($newmembers as $newmemberId => $newmember) {
    foreach($oldmembers as $oldmember) {
        if($oldmember['memberid'] == $newmember['memberid']) {
            unset($newmembers[$newmemberId]);
            break;
        }
    }
}

$newmembers and $oldmembers are your arrays of course.

Upvotes: 4

Dipesh Parmar
Dipesh Parmar

Reputation: 27364

Try

array_unique( array_merge($oldMember, $newMember) );

Did not tested but hope it will work.

Tested Code.

<?php
$oldMember = array
(
    '0' => array
    (
        'time' => 1361612421,
        'memberid' => 90
    ),
    '1' => array
    (
        'time' => 1361614422,
        'memberid' => 96
    ),
    '2' => array
    (
        'time' => 1361617423,
        'memberid' => 108
    )
);

$newMember = array
(
    '0' => array
    (
        'time' => 1361618411,
        'memberid' => 103
    ),
    '1' => array
    (
        'time' => 1361618443,
        'memberid' => 129
    ),
    '2' => array
    (
        'time' => 1361618463,
        'memberid' => 96
    )
);


$id_arr = array();
$final_arr = array();

checkmemberidArray($oldMember, $id_arr, $final_arr);
checkmemberidArray($newMember, $id_arr, $final_arr);

function checkmemberidArray($arr, &$id_arr, &$final_arr)
{
    foreach ($arr as $key => $value)
    {
        if (!in_array($value['memberid'], $id_arr))
        {
            $id_arr[] = $value['memberid'];
            $final_arr[] = $value;
        }
    }
}

echo "<pre>";
print_r($final_arr);
echo "</pre>";
?>

Upvotes: 2

Related Questions