如何在php中进行记录的内部循环 [英] How to do an inner loop of records in php

查看:83
本文介绍了如何在php中进行记录的内部循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习PHP,我想知道如何使用PHP中的记录进行内部循环或嵌套循环.如果有人向我解释了如何在PHP中执行这种类型的循环,我将不胜感激.

I am learning PHP and I want to know how to do an inner loop or nested loop with records in PHP. I will appreciate if somebody explains me how to do this type of loop in PHP.

我在MySQL中有此表 []

I have this table in MySQL []

我只想在PHP中创建一个如下所示的报告表:

I just want to create a report table in PHP that looks like this:

到目前为止,我知道如何使用下面的代码进行当前循环,但是如何在同一循环和内部循环中进行操作以显示如上表所示的菜肴.我知道如何创建格式(表格,空格等),我只需要PHP逻辑即可以最佳方式做到这一点.

So far, I know how to do a current loop with the code below but how could I do in the same loop and inner loop to show dishes like table above. I know how to create the format (table, spaces, etc) I just need the PHP logic to do this in the best way.

<?php  
do {  ?>
Table in here
 <?php } while ($selecc =    mysqli_fetch_assoc($conmenu));  ?>

推荐答案

干净/直接的方法应该是这样的:

The clean/direct approach should be something like this:

SELECT Client, Option, GROUP_CONCAT(Dish SEPARATOR ', ')
FROM table_name
GROUP BY Client, Option

然后将数据分组并粘合在一起,只需在结果集的单个循环中打印字符串即可.

Then with your data already grouped and glued together, just print your strings in a single loop of the result set.

在这里使用do {} while ()没有好处.

这是未经测试的代码段...

Here's an untested snippet...

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.

The maximum permitted result length in bytes for the GROUP_CONCAT() function. The default is 1024.

https://dev.mysql .com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

此外,$conmenu是可迭代的,因此您可以使用foreach代替while循环.

Also, $conmenu is iterable, so you could use a foreach instead of a while loop.

foreach ($conmenu as $row) { ...


如果您想用困难的方式做...


If you want to do it the hard way...

SELECT Client, Option, Dish
FROM table_name
ORDER BY Client, Option

然后...(未经测试)

Then... (untested)

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>';
}

这篇关于如何在php中进行记录的内部循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆