次のデータを含むデータベース テーブルがあります。
categoryId categoryName parentCategory
men Men root
women Women root
shoes Shoes root
mensshirts Men's Shirts men
menspants Men's Pants men
mensjeans Men's Jeans men
mensvests Men's Vests men
womensshirts Women's Shirts women
womenpants Women's Pants women
階層化されたメニューを印刷するために再帰関数を使用しています。コードは以下です。
function display_children($parent) {
global $connect;
$query = "SELECT categoryId, categoryName FROM categories WHERE parentCategory='$parent'";
$result = mysqli_query($connect,$query);
if ( $result === false ) {
printf("Query Error: %s\n", mysqli_error($connect));
exit();
}
echo "<ul>";
while ($row = mysqli_fetch_assoc($result)) {
extract($row);
echo "<li>".$categoryName."</li>";
display_children($categoryId);
}
echo "</ul>";
mysqli_close($connect);
}
display_children('root');
その結果、これを画面に出力します。
- 男性
- メンズシャツ
- メンズパンツ
- メンズジーンズ
- メンズベスト
- 女性
- 靴
再帰関数は残りのサブキャットを出力していません。その理由はわかりません。私のテスト/デバッグでは、mensvests が categoryId として関数に渡された後、次に渡される categoryId が women であることが確認されており、最後のサブキャットを見つける必要があります。何か案は?