簡體   English   中英

比較兩個具有不同數量元素的多維數組

[英]Compare two multidimensional arrays with different number of elements

我有兩個具有不同數量元素的多維數組:

$complete = array(array("24","G:\TVShows\24"),array("Lost","G:\TVShows\Lost"),array("Game of Thrones","G:\TVShows\Game of Thrones"));
$subset = array(array("24","G:\TVShows\24","English"));

第一個($ complete)是磁盤上電視節目的完整列表(節目名稱,文件路徑)。 第二個($ subset)來自我的數據庫,並將語言作為第三列/元素。

我想退回我在磁盤上但沒有出現在數據庫中的節目。 如何比較那些具有不同數量元素的數組?

謝謝您的幫助!

由於它是一個多array_map()組,因此可以使用並結合使用array_map()serialize()/unserialize() 考慮以下示例:

$complete = array(
    array("24","G:\TVShows\24"),
    array("Lost","G:\TVShows\Lost"),
    array("Game of Thrones","G:\TVShows\Game of Thrones"),
    array("The Walking Dead","G:\TVShows\The Walking Dead"),
    array("Breaking Bad","G:\TVShows\Breaking Bad"),
    array("Heroes","G:\TVShows\Heroes"),
);

$subset = array(
    array("24","G:\TVShows\24","English"),
    array("The Walking Dead","G:\TVShows\The Walking Dead","English"),
    array("Heroes","G:\TVShows\Heroes","English"),
);

$shows_not_in_db = array();
// properly format the subsets for comparison on complete
foreach($subset as $key_s => $value_s) {
    array_pop($value_s); // remove the last element "English"
    $subset[$key_s] = serialize($value_s);
}

// serialize each complete arrays
$complete = array_map('serialize', $complete);
$shows_not_in_db = array_map('unserialize', array_diff($complete, $subset)); // array diff them, then unserialize

print_r($shows_not_in_db);

樣本輸出

編輯:對於不區分大小寫的比較,可以使用以下替代方法:

$shows_not_in_db = array_map('unserialize', array_udiff($complete, $subset, 'strcasecmp'));

// sample: The walking dead - The Walking Dead

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM