php - 如何在php中进行记录的内部循环
问题描述
我正在学习 PHP,我想知道如何使用 PHP 中的记录进行内部循环或嵌套循环。如果有人向我解释如何在 PHP 中执行这种类型的循环,我将不胜感激。
我在 MySQL [ ]中有这张表
到目前为止,我知道如何使用下面的代码执行当前循环,但我如何在同一个循环和内部循环中执行以显示如上表所示的菜肴。我知道如何创建格式(表格、空格等),我只需要 PHP 逻辑以最佳方式执行此操作。
<?php
do { ?>
Table in here
<?php } while ($selecc = mysqli_fetch_assoc($conmenu)); ?>
解决方案
干净/直接的方法应该是这样的:
SELECT Client, Option, GROUP_CONCAT(Dish SEPARATOR ', ')
FROM table_name
GROUP BY Client, Option
然后,您的数据已经分组并粘合在一起,只需在结果集的单个循环中打印您的字符串。
在这里使用 ado {} while ()
没有任何好处。
这是一个未经测试的片段......
if ($conmenu) {
echo '<table>';
echo '<tr><td>Client</td><td>Option</td><td>Dishes</td></tr>';
while ($row = mysqli_fetch_assoc($conmenu)) {
echo '<tr><td>' , implode('</td><td>', $row) , '</td></tr>';
}
echo '</table>';
}
作为记录:
GROUP_CONCAT() 函数的最大允许结果长度(以字节为单位)。默认值为 1024。
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len
此外,$conmenu
它是可迭代的,因此您可以使用 foreach 而不是 while 循环。
foreach ($conmenu as $row) { ...
如果你想以艰难的方式做到这一点......
SELECT Client, Option, Dish
FROM table_name
ORDER BY Client, Option
然后...(未经测试)
if ($conmenu) {
echo '<table>';
echo '<tr><td>Client</td><td>Option</td><td>Dishes</td></tr>';
$group = null;
foreach ($conmenu as $row) {
if ($group !== $row['Client'] . '_' . $row['Option']) {
if ($group !== null) {
echo '</td></tr>';
}
echo '<tr><td>' , implode('</td><td>', $row);
} else {
echo ", " , $row['Dish'];
}
$group = $row['Client'] . '_' . $row['Option']; // update group
}
echo '</td></tr>'; // close final iteration
echo '</table>';
}
推荐阅读
- java - 如何使正则表达式检查单引号?
- php - hasMany 在 Laravel 中具有默认值
- html - 如何摆脱 img 和 div 之间的差距?
- laravel - 如何使用 Order By on with 或 wherehasone 关系
- latex - 在乳胶中创建完全对齐的表格(背页)
- javascript - 我试图在我的 Mkdocs 材料主题中实现数据表。但是为数据表添加客户代码不起作用
- javascript - 当我在网页的输入元素上按 Enter 键时触发的 JavaScript 事件侦听器
- vuetify.js - 为什么像 Vuetify 这样的库建议在生产中通过 CDN 安装字体?
- php - 如何在 HTML 选择列表中检索选项项的属性?
- reactjs - 无法在 makeStyle 中使用“this”