2014-09-10 176 views
0

我正在嘗試爲遊戲做一個工藝計算器。工藝計算器循環

我有一個數據庫,誰是這樣的:

工藝品:

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

這是一個基本的遞歸設置:

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>"