【发布时间】:2010-04-05 18:33:39
【问题描述】:
我通过为每个“专辑”分配一个“parent_album_id”来在 mysql 中存储一个无限嵌套的目录结构(除非它位于顶层,在这种情况下它没有 parent_album_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;
}
【问题讨论】:
标签: php arrays sorting multidimensional-array