カテゴリの配列を並べ替えることをお勧めします。ルートカテゴリは、子カテゴリの前に新しい配列で最初に表示する必要があります。ルートカテゴリ別にカテゴリの並べ替えを並べ替え
例データ:私が達成したい
$data = [
['id' => '1', 'name' => 'abc', 'parent_id' => '0' ],
['id' => '4', 'name' => 'def', 'parent_id' => '5' ],
['id' => '3', 'name' => 'ghj', 'parent_id' => '2' ],
['id' => '5', 'name' => 'zst', 'parent_id' => '1' ],
['id' => '2', 'name' => 'klm', 'parent_id' => '1' ],
];
が出力:
$output = [
'1' => ['id' => '1', 'name' => 'abc', 'parent_id' => '0' ],
'5' => ['id' => '5', 'name' => 'zst', 'parent_id' => '1' ],
'4' => ['id' => '4', 'name' => 'def', 'parent_id' => '5' ],
'2' => ['id' => '2', 'name' => 'klm', 'parent_id' => '1' ],
'3' => ['id' => '3', 'name' => 'ghj', 'parent_id' => '2' ],
];
私のコード今まで:
function sortCategories($data) {
$output = [];
foreach ($data as $category) {
if ($output[$category['id']] || $output[$category['parent_id']])
continue;
if (!$output[$category['parent_id']])
$output = getParentCategories($category, $ouput, $data);
$output[$category['id']] = [
'id' => $category['id'],
'name' => $category['name'],
'parent_id' => $category['parent_id']
];
}
return $output;
}
function getParentCategories($category, $output, $data) {
if ($output[$category['parent_id']]) {
return $output;
} else {
}
}
私が持っている問題は、私がいないということですおそらくgetParentCategories()を実装して、この関数がルートカテゴリを正しく処理するようにする方法を知っています。
問題の解決方法を教えてください。
@Anantかさえ短い:https://eval.in/599831 – PaulH
残念ながらありません。なぜなら私はparent_idで配列をソートできないからです。 – Bene
'root'と' child'を明確にすることができますか?たぶんこれらの言葉を落として、代わりに 'parent_id'と' id'(あるいはその逆、それは混乱の可能性があります)を使用してください。同義語を避けることがITの優れた習慣です。 – PaulH