Php 代码点火器在另一个回路中循环
我的主要产品类别如下 糕饼 列表项 小面包 太妃糖 面包 在一个主要产品类别下也有子产品 一块蛋糕 1.1黄油结块1.2巧克力蛋糕 在我看来,我仅通过使用以下代码来回应这些主要产品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
<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的变量中。这可能是一个新的解决方案,但您的代码运行良好,这只是一个改进。看一看:我受到了启发,像个男人一样使用递归函数!英雄联盟