Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 代码点火器在另一个回路中循环_Php_Codeigniter - Fatal编程技术网

Php 代码点火器在另一个回路中循环

Php 代码点火器在另一个回路中循环,php,codeigniter,Php,Codeigniter,我的主要产品类别如下 糕饼 列表项 小面包 太妃糖 面包 在一个主要产品类别下也有子产品 一块蛋糕 1.1黄油结块1.2巧克力蛋糕 在我看来,我仅通过使用以下代码来回应这些主要产品 <div class="row"> <?php if(isset($records)) : foreach($records as $row) : ?> <div class="span2"> <p cl

我的主要产品类别如下

糕饼 列表项 小面包 太妃糖 面包 在一个主要产品类别下也有子产品

一块蛋糕 1.1黄油结块1.2巧克力蛋糕

在我看来,我仅通过使用以下代码来回应这些主要产品

<div class="row">
        <?php if(isset($records)) : foreach($records as $row) : ?>
            <div class="span2">
                <p class="text-center subheader"><?php echo $row->main_products_cat_name; ?>
                </p>
                <p class="text-center">
                    <a href="<?php echo base_url()?>product/all_product_data?id=<?php echo $row->main_products_cat_id;?>"><img src="<?php echo base_url(); ?>assests/images/products/main_products/<?php echo $row->main_products_cat_image; ?>" alt="<?php echo $row->main_products_cat_name; ?>" width="200px" height="200px">
                    </a>
                </p>
            </div>          
        <?php endforeach; ?>
        <?php endif; ?>
</div>

如果我假设您的分类表如下所示,是否有人可以帮助我在主产品下回显子产品类别。

+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| id        | tinyint(4) unsigned | NO   | PRI | NULL    |       |
| parent_id | tinyint(4) unsigned | YES  | MUL | NULL    |       |
| name      | varchar(255)        | YES  |     | NULL    |       |
| note      | varchar(254)        | YES  |     | NULL    |       |
+-----------+---------------------+------+-----+---------+-------+
+----+-----------+----------------+------+
| id | parent_id | name           | note |
+----+-----------+----------------+------+
|  1 | NULL      | bakery         | NULL |
|  2 |         1 | Cake           | NULL |
|  3 |         1 | Bun            | NULL |
|  4 |         1 | Toffee         | NULL |
|  5 |         1 | Bread          | NULL |
|  6 |         2 | Chocolate cake | NULL |
|  7 |         2 | Butter cake    | NULL |
|  8 |         3 | Honey bun      | NULL |
|  9 |         5 | Italian bread  | NULL |
| 10 |         5 | French bread   | NULL |
| 11 |         5 | Bereber bread  | NULL |
+----+-----------+----------------+------+
请注意,您有一个指向id的递归关系parent_id

现在,让我们用这样的数据填充它

+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| id        | tinyint(4) unsigned | NO   | PRI | NULL    |       |
| parent_id | tinyint(4) unsigned | YES  | MUL | NULL    |       |
| name      | varchar(255)        | YES  |     | NULL    |       |
| note      | varchar(254)        | YES  |     | NULL    |       |
+-----------+---------------------+------+-----+---------+-------+
+----+-----------+----------------+------+
| id | parent_id | name           | note |
+----+-----------+----------------+------+
|  1 | NULL      | bakery         | NULL |
|  2 |         1 | Cake           | NULL |
|  3 |         1 | Bun            | NULL |
|  4 |         1 | Toffee         | NULL |
|  5 |         1 | Bread          | NULL |
|  6 |         2 | Chocolate cake | NULL |
|  7 |         2 | Butter cake    | NULL |
|  8 |         3 | Honey bun      | NULL |
|  9 |         5 | Italian bread  | NULL |
| 10 |         5 | French bread   | NULL |
| 11 |         5 | Bereber bread  | NULL |
+----+-----------+----------------+------+
现在,我们在模型中创建一个方法,该方法获取给定id的所有子类别

模型

然后我们在controller menu.php中调用这个方法

控制器

现在在视图中,我们只是通过这样一个简单的回显来回显就绪菜单

看法

然后输出将如下所示

+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| id        | tinyint(4) unsigned | NO   | PRI | NULL    |       |
| parent_id | tinyint(4) unsigned | YES  | MUL | NULL    |       |
| name      | varchar(255)        | YES  |     | NULL    |       |
| note      | varchar(254)        | YES  |     | NULL    |       |
+-----------+---------------------+------+-----+---------+-------+
+----+-----------+----------------+------+
| id | parent_id | name           | note |
+----+-----------+----------------+------+
|  1 | NULL      | bakery         | NULL |
|  2 |         1 | Cake           | NULL |
|  3 |         1 | Bun            | NULL |
|  4 |         1 | Toffee         | NULL |
|  5 |         1 | Bread          | NULL |
|  6 |         2 | Chocolate cake | NULL |
|  7 |         2 | Butter cake    | NULL |
|  8 |         3 | Honey bun      | NULL |
|  9 |         5 | Italian bread  | NULL |
| 10 |         5 | French bread   | NULL |
| 11 |         5 | Bereber bread  | NULL |
+----+-----------+----------------+------+

如果我假设您的分类表如下所示

+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| id        | tinyint(4) unsigned | NO   | PRI | NULL    |       |
| parent_id | tinyint(4) unsigned | YES  | MUL | NULL    |       |
| name      | varchar(255)        | YES  |     | NULL    |       |
| note      | varchar(254)        | YES  |     | NULL    |       |
+-----------+---------------------+------+-----+---------+-------+
+----+-----------+----------------+------+
| id | parent_id | name           | note |
+----+-----------+----------------+------+
|  1 | NULL      | bakery         | NULL |
|  2 |         1 | Cake           | NULL |
|  3 |         1 | Bun            | NULL |
|  4 |         1 | Toffee         | NULL |
|  5 |         1 | Bread          | NULL |
|  6 |         2 | Chocolate cake | NULL |
|  7 |         2 | Butter cake    | NULL |
|  8 |         3 | Honey bun      | NULL |
|  9 |         5 | Italian bread  | NULL |
| 10 |         5 | French bread   | NULL |
| 11 |         5 | Bereber bread  | NULL |
+----+-----------+----------------+------+
请注意,您有一个指向id的递归关系parent_id

现在,让我们用这样的数据填充它

+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| id        | tinyint(4) unsigned | NO   | PRI | NULL    |       |
| parent_id | tinyint(4) unsigned | YES  | MUL | NULL    |       |
| name      | varchar(255)        | YES  |     | NULL    |       |
| note      | varchar(254)        | YES  |     | NULL    |       |
+-----------+---------------------+------+-----+---------+-------+
+----+-----------+----------------+------+
| id | parent_id | name           | note |
+----+-----------+----------------+------+
|  1 | NULL      | bakery         | NULL |
|  2 |         1 | Cake           | NULL |
|  3 |         1 | Bun            | NULL |
|  4 |         1 | Toffee         | NULL |
|  5 |         1 | Bread          | NULL |
|  6 |         2 | Chocolate cake | NULL |
|  7 |         2 | Butter cake    | NULL |
|  8 |         3 | Honey bun      | NULL |
|  9 |         5 | Italian bread  | NULL |
| 10 |         5 | French bread   | NULL |
| 11 |         5 | Bereber bread  | NULL |
+----+-----------+----------------+------+
现在,我们在模型中创建一个方法,该方法获取给定id的所有子类别

模型

然后我们在controller menu.php中调用这个方法

控制器

现在在视图中,我们只是通过这样一个简单的回显来回显就绪菜单

看法

然后输出将如下所示

+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| id        | tinyint(4) unsigned | NO   | PRI | NULL    |       |
| parent_id | tinyint(4) unsigned | YES  | MUL | NULL    |       |
| name      | varchar(255)        | YES  |     | NULL    |       |
| note      | varchar(254)        | YES  |     | NULL    |       |
+-----------+---------------------+------+-----+---------+-------+
+----+-----------+----------------+------+
| id | parent_id | name           | note |
+----+-----------+----------------+------+
|  1 | NULL      | bakery         | NULL |
|  2 |         1 | Cake           | NULL |
|  3 |         1 | Bun            | NULL |
|  4 |         1 | Toffee         | NULL |
|  5 |         1 | Bread          | NULL |
|  6 |         2 | Chocolate cake | NULL |
|  7 |         2 | Butter cake    | NULL |
|  8 |         3 | Honey bun      | NULL |
|  9 |         5 | Italian bread  | NULL |
| 10 |         5 | French bread   | NULL |
| 11 |         5 | Bereber bread  | NULL |
+----+-----------+----------------+------+

我分享我自己的get_分类方法。这个主意不是我的。我是从一年前不记得的地方弄来的

public static $list;
public static function get_category(){
        $map_result = Product::get_category_array();
        // it's like select * from categories. with your table structure

        foreach($map_result as $row){
            $ref = &$refs[$row['cat_id']];

            $ref['parent_id'] = $row['parent_id'];
            $ref['cat_name']  = $row['cat_name'];
            $ref['cat_id']  = $row['cat_id'];

            if ($row['parent_id'] == 0){
                $list[$row['cat_id']] = &$ref;
            }else{
                $refs[$row['parent_id']]['children'][$row['cat_id']] = &$ref;
            }
        }
        self::$list = $refs;

        function toUL($list){
            $class="";
            $html = "";

            foreach ($list as $value){
                if (!empty($value['children'])){
                    $html .= '<li><a class="dir" href="./index.php?cat='.$value['cat_id'].'">'.htmlspecialchars($value['cat_name'])."</a>";
                }else{
                    $html .= '<li><a href="./index.php?cat='.$value['cat_id'].'">'.htmlspecialchars($value['cat_name'])."</a>";
                }

                if (!empty($value['children'])){
                    $html .= "<ul>".toUL($value['children'])."</ul>";
                }
                $html .= "</li>";
            }
            return $html;
        }
        return toUL($list);
    }

看看toUL函数以及它在递归列表中是如何使用的。

我分享了我自己的get\u category方法。这个主意不是我的。我是从一年前不记得的地方弄来的

public static $list;
public static function get_category(){
        $map_result = Product::get_category_array();
        // it's like select * from categories. with your table structure

        foreach($map_result as $row){
            $ref = &$refs[$row['cat_id']];

            $ref['parent_id'] = $row['parent_id'];
            $ref['cat_name']  = $row['cat_name'];
            $ref['cat_id']  = $row['cat_id'];

            if ($row['parent_id'] == 0){
                $list[$row['cat_id']] = &$ref;
            }else{
                $refs[$row['parent_id']]['children'][$row['cat_id']] = &$ref;
            }
        }
        self::$list = $refs;

        function toUL($list){
            $class="";
            $html = "";

            foreach ($list as $value){
                if (!empty($value['children'])){
                    $html .= '<li><a class="dir" href="./index.php?cat='.$value['cat_id'].'">'.htmlspecialchars($value['cat_name'])."</a>";
                }else{
                    $html .= '<li><a href="./index.php?cat='.$value['cat_id'].'">'.htmlspecialchars($value['cat_name'])."</a>";
                }

                if (!empty($value['children'])){
                    $html .= "<ul>".toUL($value['children'])."</ul>";
                }
                $html .= "</li>";
            }
            return $html;
        }
        return toUL($list);
    }


看看toUL函数,看看它是如何在递归列表中使用的。

能否向我们展示用于获取$records的表和查询?问题还不清楚,在您的$records中,我们只能理解您有主类别id和图像,您是否也有所有子类别?我们不知道,所以数据库模式和使用的查询应该是问题的一部分,然后您肯定会有答案@Baci使用它并不难fields@charlietfl什么是带注释的伪字段?能否向我们展示用于获取$记录的表和查询?问题还不清楚,在您的$records中,我们只能理解您有主类别id和图像,您是否也有所有子类别?我们不知道,所以数据库模式和使用的查询应该是问题的一部分,然后您肯定会有答案@Baci使用它并不难fields@charlietfl什么是带注释的伪字段?最好创建一个函数来获取子类别,在该函数中,如果它有sub,则调用同一个函数来获取sub。它会生成一个无限级别的类别列表。@meh是的,这就是get_subcategories_id$id在模型和控制器中所做的,它只是检查是否有子类别并将其放在$菜单中,还是我没有理解您?请看我答案中的toUL函数。最好创建一个函数来获取子类别,并在该函数中说明它是否有子类别,然后调用相同的函数来获取subs。它制作了一个无限级别的类别列表。@meh是的,这就是get_subcategories_id$id在模型和控制器中所做的,它只是检查是否有子项并将其放入$menu中,还是我没有理解您?请看我答案中的toUL函数。这对我来说有点复杂,我如何用我的解决方案实现它,我现在有点抓狂lol@Baci这段代码的好处是,它使用1个查询来获取类别,然后在递归数组中对其排序,然后回显。您可以忽略第一部分,即数组中的排序。仅为了输出,将您的第一个foreach函数命名为abc$id,然后在if$sub_level之后,使用该abc$new_id获取其余类别,并将其放入一个变量中以供echo使用。这可能是一个新的解决方案,但您的代码运行良好,这只是一个改进。看一看:我受到了启发,像个男人一样使用递归函数!这对我来说有点复杂,我该如何用我的解决方案来实现它,我现在有点抓狂lol@Baci这段代码的好处是,它使用1个查询来获取类别,然后在递归数组中对其排序,然后回显。您可以忽略第一部分,即数组中的排序。只是为了输出,将您的第一个foreach带到一个函数,例如将其命名为abc$id,然后在if$sub之后_
级别,使用abc$new_id获取其余类别,并将其放入echo的变量中。这可能是一个新的解决方案,但您的代码运行良好,这只是一个改进。看一看:我受到了启发,像个男人一样使用递归函数!英雄联盟