2013-02-23 101 views
0

我有2個數組,例如PHP比較2個多維數組並刪除基於鍵值的重複

OldMembers:

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

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

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

和NewMembers

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

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

什麼是去除基於關鍵MEMBERID從NewMembers重複的最好方法?例如。在這種情況下,我需要從NewMembers中刪除第二個數組,因爲memberid 96已經在位置1上的OldMembers中存在...並且我只需要從NewMembers數組中刪除該實例?

+0

嘗試'in_array'function併發布您的代碼,然後 – michi 2013-02-23 11:50:50

回答

1

嘗試

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

沒有測試,但希望它會奏效。

經過測試的代碼。

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

這將不起作用,因爲兩個陣列之間的時間不匹配。他只想比較成員身份。 – Barmar 2013-02-23 11:53:25

+0

不適用於多維數組,不幸的是...請參閱:(http://www.php.net/manual/en/function.array-unique.php) – michi 2013-02-23 11:53:44

+0

@Barmar是的,我意識到,事後......我已經更新了我的答案... – 2013-02-23 12:03:25

3

不是最好的答案,但如果沒有其他人會提出任何建議,至少你會有。

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

$ newmembers和$ oldmembers是你的數組當然。

+0

你應該'break'出來的時候找到一個匹配的內部循環。否則它看起來像一個很好的解決方案 – Barmar 2013-02-23 11:56:08

+0

這是你如何做到的? :D – lauriys 2013-02-23 12:10:53

相關問題