我试图为游戏做一个工艺计算器。
我有一个看起来像这样的数据库:
工艺品:
id item_id item_name amount
3 1895 a 5
8 2486 c 1
Craft_materials:
id craft_id item_id item_name amount
1 3 2486 c 15
2 3 5302 d 23
3 3 5698 e 2
4 8 2014 f 3
这是我查询数据的查询:
$craftProduct = $db->query("SELECT * FROM crafts WHERE item_id=$item");
$craftProduct->setFetchMode(PDO::FETCH_OBJ);
$product = $craftProduct->fetch();
$craftID = $product->id;
$craftMaterial = $db->query("SELECT * FROM craft_materials WHERE craft_id=$craftID");
$craftMaterial->setFetchMode(PDO::FETCH_OBJ);
echo '<ul>';
echo '<li>'.$product->item_name.' ('.$product->amount.')</li>';
echo '<ul>';
while($material = $craftMaterial->fetch()){
echo '<li>'.$material->item_name.' ('.$material->amount.')</li>';
}
echo '</ul>';
echo '</ul>';
我想要做的是获取材料ID并检查它是否与工艺相符。如果是的话,我想展示制作它所需的材料。
我想要一些看起来像这样的东西:
- a (5)
- c (15)
- f (3)
- d (23)
- e (2)
但是,我不知道如何进行循环。任何人都可以帮助我吗?
答案 0 :(得分:0)
这是一个基本的递归设置:
function render_item($item_id) {
$product = fetch_item($item_id); // select from crafts where item_id = $item_id
$children = "";
foreach (fetch_children($product->id) as $child_id) { // select from craft_mats where craft_id = $product->id
$children .= render_item($child_id);
}
echo "<li>" . $product->item_name . "<ul>" . $children . "</ul></li>";
}
echo "<ul>" . render_item(1895) . "</ul>"