PHP foreach子类别故障

PHP foreach子类别故障,php,loops,foreach,Php,Loops,Foreach,我在创建脚本时遇到了问题,在脚本中,某个子类别的产品需要在某个分区内打印。目前我正在提取所有需要的数据,但如果我有4个类别,此时会发生什么情况,它创建了4次DIV,但是DIV中的产品都是相同的,但是我需要它们特定于相关类别,希望这是有意义的。这就是我到目前为止所做的: $categories = getCategories(); foreach($categories as $category) { echo '<div class="pa

我在创建脚本时遇到了问题,在脚本中,某个子类别的产品需要在某个分区内打印。目前我正在提取所有需要的数据,但如果我有4个类别,此时会发生什么情况,它创建了4次DIV,但是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>';
        }
返回:

$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.
     }
}
我对php非常陌生,所以我不知道如何在没有foreach的情况下运行这个循环,我认为这是我出错的地方


提前谢谢

首先,我想提到的是,类别和子类别应该在同一个DB表中,子类别应该用一个字段(例如subcategory_of)标记,并且应该与类别的ID相关联。所以我们没有ID的混合,因为产品可以在两个类别或子类别下

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

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

  • 检查类别是否有子类别,如果有,则获取该子类别下的产品
  • 检查该类别中是否有任何产品
  • 因此,您将得到与此类似的结果:

    注1:每个子类别也被视为一个类别,因此我们将在此处使用子类别的类别ID。但是,当我们将子类别放入数组时,我们应该只获取与
    getSubcategories
    方法的参数中提供的
    $category\u id
    相关联的子类别。这些“get方法”应该返回数组,这样我们就可以循环使用它们

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


    我希望这能让您明白。

    您的getProducts()是做什么的?现在看起来你正在为categories循环的每个迭代运行一个查询,如果你有很多类别,这可能会非常低效。这只是一个朋友的快速修复,不会有超过5个类别,也不会有很多产品,所以我现在不太担心效率低下。
    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 
     )
    
    $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.
         }
    }