2013-04-01 94 views
5

我有兩個多維數組是這樣的:PHP和2多維數組比較基於兩個鍵值

$original = Array (
[0] => Array 
    (
     [time] => 1364690340 
     [memberid] => 90 
     [type] => single 
    ) 

[1] => Array 
    (
     [time] => 1364690341 
     [memberid] => 92 
     [type] => fixed 
    ) 

[2] => Array 
    (
     [time] => 1364690342 
     [memberid] => 96 
     [type] => single 
    ) 
) 

和第二個這樣的

$new = Array (
[0] => Array 
    (
     [time] => 1364825750 
     [memberid] => 90 
     [type] => single 
    ) 

[1] => Array 
    (
     [time] => 1364825751 
     [memberid] => 92 
     [type] => single 
    ) 

[2] => Array 
    (
     [time] => 1364825752 
     [memberid] => 96 
     [type] => single 
    ) 

[3] => Array 
    (
     [time] => 1364825753 
     [memberid] => 111 
     [type] => single 
    ) 
) 

我的問題是:我要搜索$基於成員id和類型鍵的匹配原始數組,如果memberid和類型不相同 - >我想從$原始數組中刪除該數組。所以在這種情況下,我想保留數組和[2]數組,因爲在$新數組中我有相同的成員ID和原來的相同類型,但我想刪除[1]數組,因爲成員ID是相同的,但類型是不同的。所以,我最後的$原數組看起來就像這樣:

$original = Array (
[0] => Array 
    (
     [time] => 1364690340 
     [memberid] => 90 
     [type] => single 
    ) 

[1] => Array 
    (
     [time] => 1364690342 
     [memberid] => 96 
     [type] => single 
    ) 
) 

回答

2

在這裏你去,只是測試它和它的作品如預期。

// Presuming your two arrays are still called $new & $original 
$original = array(); // your data 
$new = array(); // your data 

$newArray = array(); 
foreach($original AS $key => $val){ 
    $newArray[$val['memberid'] . '-' . $val['type']] = $val; 
} 

$original = array(); 
foreach($new AS $key => $val){ 
    if(isset($newArray[$val['memberid'] . '-' . $val['type']])){ 
     $original[] = $newArray[$val['memberid'] . '-' . $val['type']]; 
    } 
} 

print_r($original); 
-1

未做有關數據做任何假設,這裏是一個低效率的解決方案,O( * ñ)如果ñ是您的陣列的長度:

$new_original = array(); 
foreach ($original as $elem) { 
    // let's see if $new has something with the same type and memberid 
    foreach ($new as $candidate) { 
    if ($candidate['type'] == $elem['type'] && 
     $candidate['memberid'] == $elem['memberid']) { 
     // it does! let's keep $elem 
     $new_original[] = $elem; 
    } 
    } 
} 

// reassign it to $original if desired 
$original = $new_original; 

但是,要做更有效的查找會更酷。舉例來說,如果我們可以假設存在與給定MEMBERID最多一個元素$new是:

// turn $new into a map 
$new_as_map = array(); 
foreach ($new as $candidate) { 
    $new_as_map[$candidate['memberid']] = $candidate; 
} 

$new_original = array(); 
foreach ($original as $elem) { 
    if (isset($new_as_map[$elem['memberid']])) { 
    $candidate = $new_as_map[$elem['memberid']]; 
    if ($candidate['type'] == $elem['type']) { 
     $new_original[] = $elem; 
    } 
    } 
} 

// reassign it to $original if desired 
$original = $new_original;