2011-02-13 80 views
0

我無法創建腳本,其中某個子類別的產品需要在某個DIV內打印。目前,我正在提取所需的所有數據,但目前發生的情況是,例如,如果我有4個類別,它會創建4次DIV,但DIV中的產品都是相同的,但我需要它們是特定於相關類別,希望有道理。這是我到目前爲止:PHP foreach子類別問題

$categories = getCategories(); 

     foreach($categories as $category) 
     { 
     echo '<div class="panel"> 
      <div class="panel-wrapper"><pre>'; 
      echo print_r(getProducts($category['id_category'])); 
      echo '</pre> 
       <h2 class="title">ff</h2>'; 


     echo '</div> 
     </div>'; 
     } 

$ categories = array('1','2','3'); 產品拉到這樣

$i = 0; 
while ($row = mysql_fetch_assoc($result)) 
{ 
    $products[$i] = $row; 
    $i++; 
} 
return $products; 

將返回:

Array 
(
    [0] => Array 
     (
      [title] => Hat 
      [description] =>nice description 
      [visible] => 1 
      [date-added] => 2011-02-10 20:02:02 
      [date-updated] => 0000-00-00 00:00:00 
      [price] => 10 
      [id_category] => 2 
     ) 
    [1] => Array etc etc etc 
) 

我很新的PHP,所以我不知道如何沒有一個foreach這是我覺得我跑這個循環會錯的。

在此先感謝!

+0

你的getProducts()做了什麼?現在看起來您正在爲類別循環的每個迭代運行查詢,如果您有很多類別,這可能會非常低效。 – 2011-02-13 00:48:12

回答

1

首先,我想提一下,類別和子類別應該在同一個數據庫表中,並且子類別應該使用字段(例如subcategory_of)進行標記,並且應該與類別的ID關聯。因此,我們不會混用ID,因爲產品可能屬於兩個類別或子類別。

初始化一個通用數組,該數組將會變爲$array['category']['subcategory']['product_id'],或者在某些情況下,產品可能直接位於沒有子類別分類的類別中。 您不必這樣做,只需打印輸出而不將它們保存在數組中。通過他們

運行從類別開始,爲每個類別:

  1. 檢查類別有子類別,如果這樣做,得到的產品,子類別下。
  2. 檢查類別內是否有任何產品。

所以,你將有什麼是與此類似:

$cat = 0; 
$categories = getCategories(); 

foreach ($categories as $category) { 
    // If you want to print something about the category, do it here. 
    $subcategories = getSubcategories($category_id); 

    $subcat = 0; 
    foreach ($subcategories as $subcategory) { 
     $products = getProducts($category_id_for_subcategory) // see note 1 

     foreach ($products as $product) { 
      // This product is under a subcategory. Do what you want here. 
      $array[$cat][$subcat++][] = $product; // or echo the product... 
     } 
    } 

    $products = getProducts($category_id); 
    foreach ($products as $product) { 
     // This product is under a general category, and not a subcategory. 
     // Do what you want to do with this product here. 
     $array[$cat++][] = $product; // or echo the product. 
    } 
} 

注1:每個子類也被認爲是一類,所以我們將在這裏使用的子類別類別ID。但是,當我們將子類別放入數組中時,我們只應該得到與getSubcategories方法的參數中提供的$category_id相關聯的子類別。而這些「get方法」應該返回數組,所以我們可以通過它們循環。

注意2:我知道這是寫這段代碼的潛在危險方式,因爲我們每次在foreach循環中迭代時都要查詢數據庫。就像Marc所說,如果你有很多類別和產品,這可能是非常低效的。我這樣寫的原因是因爲它很冗長,並且允許一個新程序員理解我們所做事情背後的想法更容易(至少,這讓我更容易理解它)。

我希望這可以讓你的事情變得清晰。