私は次の配列構造を持っています:
| ID | CategoryName | ParentID
_________________________________
1 | Movies | -1
_________________________________
2 | Series | -1
_________________________________
3 | ActionMovies | 1
_________________________________
4 | HorrorMovies | 1
_________________________________
5 | ComedySeries | 2
_________________________________
6 | TVShows | -1
私の目標は、次の構造に到達することです
ゴール:
| ID | CategoryName | ParentID
_________________________________
1 | Movies | -1
_________________________________
3 | ActionMovies | 1
_________________________________
4 | HorrorMovies | 1
_________________________________
2 | Series | -1
_________________________________
5 | ComedySeries | 2
_________________________________
6 | TVShows | -1
または言葉で説明:
- 親カテゴリにある
ParentID = -1
(映画の例) - すべてのカテゴリは元の ID 番号を保持します
- ParentCategory の直後にリストする必要があります (ActionMovies の例)
- Children のない RootCategories は、配列の最後にリストされます。(テレビ番組の例)
PHPでこれを最善に達成するにはどうすればよいですか? 元のMysqlクエリにアクセスできないため、それはオプションではありません:)
私はこのコードから始めましたが、それが正しい道であり、最小限の労力/読みやすさであるかどうかはわかりません
$tmpList = Categories_Models_Main::getAllCategories();
$categoryData = array();
foreach ($tmpList as $index => $categoryObject) {
$categoryData[] = array('id' => $categoryObject->id,
'CategoryName' => $categoryObject->parentId,
'name' => $categoryObject->name);
}
///let us assume $categoryData is original state.
///Beginning of manipulation and re-sorting of $tmpList
foreach ($categoryData as $key => $value) {
$mainId[$key] = $value['id'];
$parentId[$key] = $value['parentId'];
}
array_multisort($parentId, $mainId, $categoryData);