PHP foreach子类麻烦

时间:2011-02-13 00:38:04

标签: php loops foreach

我在创建脚本时遇到问题,其中需要在特定DIV内打印具有特定子类别的产品。目前我正在提取我需要的所有数据但目前正在发生的事情,例如我有4个类别,它创建DIV 4次,但DIV中的产品都是相同的但我需要它们特定于相关类别,希望有道理。这就是我到目前为止所做的:

$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的情况下运行这个循环,这是我认为我出错的地方。

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先,我想提及类别和子类别应该在同一个数据库表中,子类别应该用字段(例如subcategory_of)标记,并且应该与类别的ID相关联。因此,我们没有ID的混淆,因为产品可以属于两个类别或子类别。

初始化将转到$array['category']['subcategory']['product_id']的常规数组,或者在某些情况下,产品可能直接属于没有子类别分类的类别。 您不必这样做,只需打印输出而不将其保存在数组中。

从类别开始,为每个类别运行它们:

  1. 检查类别是否包含子类别,如果有,则获取该子类别下的产品。
  2. 检查该类别中是否有任何产品。
  3. 所以你将会有类似的东西:

    $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。但是,当我们将子类别放入数组时,我们应该只获得与$category_id方法的参数中提供的getSubcategories相关联的那些。而这些“get methods”应该返回数组,所以我们可以循环遍历它们。

    注意2:我知道这是编写此代码的一种潜在危险方式,因为每次迭代foreach循环时我们都在查询数据库。和Marc说的一样,如果您有很多类别和产品,这可能会非常低效。我这样写它的原因是因为它很冗长,并允许新程序员理解我们正在做的事情背后的想法(至少,它让我更容易理解它)。

    我希望这能让你清楚明白。