比較巢狀關聯陣列的差異
在程式設計環境中,處理多維關聯數組時,通常需要比較它們的內容並找出出差異。考慮有兩個陣列的場景:
$pageids = [ ['id' => 1, 'linklabel' => 'Home', 'url' => 'home'], ['id' => 2, 'linklabel' => 'Graphic Design', 'url' => 'graphicdesign'], ['id' => 3, 'linklabel' => 'Other Design', 'url' => 'otherdesign'], ['id' => 6, 'linklabel' => 'Logo Design', 'url' => 'logodesign'], ['id' => 15, 'linklabel' => 'Content Writing', 'url' => 'contentwriting'], ]; $parentpage = [ ['id' => 2, 'linklabel' => 'Graphic Design', 'url' => 'graphicdesign'], ['id' => 3, 'linklabel' => 'Other Design', 'url' => 'otherdesign'], ];
目標是尋找 $pageids 中不存在於 $parentpage 中的行。如果陣列包含巢狀關聯數組,則單獨使用 array_diff_assoc() 可能不會產生所需的結果。為了解決這個問題,我們可以利用 array_map() 和 unserialize()。
$pageWithNoChildren = array_map('unserialize', array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));
首先,array_map() 迭代 $pageids 和 $parentpage 中的子數組,並將每個子數組序列化為使用serialize() 的字串表示形式。這有效地將多維數組轉換為以字串作為元素的一維數組。
接下來,array_diff() 比較子陣列的字串表示形式,並傳回一個僅包含差異的陣列。然後將產生的陣列傳回 array_map(),該陣列迭代每個字串並使用 unserialize() 將其反序列化回其原始子數組表示形式。
因此, $pageWithNoChildren 將包含一個陣列表示 $pageids 中不存在於 $parentpage 中的行的子數組。這種方法有效地比較嵌套關聯數組的內容並提供所需的差異。
以上是如何有效比較嵌套關聯數組的差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!