1
我通過給每個「album」分配一個「parent_album_id」來存儲mysql中無限嵌套的目錄結構(除非它在頂層,在這種情況下它會沒有parent_album_id)。基於「parent_id」將數組排序爲多維數組
我首先從數據庫中獲取所有相冊的數組,並將每個相冊鍵更改爲「id」(自動增量id)。
接下來,我想將相冊數組重新組織爲一個多維數組,將每個專輯的'children'中的子專輯存儲在一個多維數組中。我取得了一些成功。如果我只需要關閉數組中的一個級別,下面的代碼就可以正常工作,但如果我關閉多個級別,則會失去數組的完整結構。這是因爲當我遞歸調用array_search_key時,我不會傳遞完整的數組,只是我想要搜索的下一個級別。
如何遞歸搜索數組,但返回整個相冊的多維數組?
foreach ($albums as &$album){
if($album['parent_album_id']){ // Move album if it has a parent
$insert_album = $album;
unset($albums[$album['id']]); // Remove album from the array, since we are going to insert it into its parent
$results = array_search_key($album['parent_album_id'],$albums,$insert_album, $albums);
if($results){
$albums = $results;
}
}
}
function array_search_key($needle_key, $array , $insert_album) {
foreach($array AS $key=>&$value){
if($key == $needle_key) {
$array[$key]['children'][$insert_album['id']] = $insert_album;
return $array;
}
if(is_array($value) && is_array($value['children'])){
if(($result = array_search_key($needle_key, $value['children'], $insert_album)) !== false)
return $result;
}
}
return false;
}
有些事情錯功能。在返回的數組中,ID爲5的相冊會多次出現不同的標題。 – makeee 2010-04-05 19:20:33
該腳本正常工作。但是我粘貼了腳本版本的輸出,其中多個元素的'id'=> 5(複製和粘貼錯誤)。糾正。 – VolkerK 2010-04-05 19:34:03
謝謝,效果很好!只有我所做的更改是在數組的最後一個循環中,並使用parent_id刪除所有頂級專輯(因爲它們已經插入正確的父代)。 – makeee 2010-04-05 21:34:39