0

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 ?

1
  • try the in_arrayfunction and post your code then Commented Feb 23, 2013 at 11:50

2 Answers 2

4

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.

Sign up to request clarification or add additional context in comments.

1 Comment

You should break out of the inner loop when it finds a match. Otherwise it looks like a fine solution.
2

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>";
?>

2 Comments

That won't work because the times don't match between the two arrays. He only wants to compare memberids.
not working on multi-dimensional arrays, unfortunately... see: (php.net/manual/en/function.array-unique.php)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.