php - foreach中的foreach?显示不正确的数据

标签 php mysql foreach

我有 2 张 table 。 t1t2

t1数据如下:

+--------+---------------+--------------+
| mid    | name          | desc         |
+---------------------------------------+
| 1      | Fris          | Helo         |
| 2      | Kenn          | Wow!         |
| 3      | Henny         | CCC          |
+---------------------------------------+

t2数据如下:

+--------+---------+----------------+
| tid    | mid     | tcode          |
+-----------------------------------+
| 1      | 1       | 1              |
| 2      | 1       | GG             |
| 3      | 1       | TTTTTT!        |
+-----------------------------------+

现在我的 php 编码是这样的:

$xzdtall = DB::fetch_all("SELECT * FROM t1 ORDER BY mid ASC");
foreach($xzdtall as $xzdt){
    $testing = DB::fetch_all("SELECT * FROM t2 WHERE mid = $xzdt['mid'] ORDER BY tid ASC");
    foreach($testing as $test){
        $testlist[] = $test;
    }
    $xzdtlist[] = $xzdt;
}

现在我的循环如下:

#my looping
<!--{loop $xzdtlist $xzdt}-->
<div>$xzdt[name] <!--{loop $testlist $test}--><b>$test[tcode]</b><!--{/loop}--></div>
<!--{/loop}-->

我的最终输出:

<div>Fris <b>1</b><b>GG</b><b>TTTTTT!</b></div>
<div>Kenn <b>1</b><b>GG</b><b>TTTTTT!</b></div>
<div>Henny <b>1</b><b>GG</b><b>TTTTTT!</b></div>

实际上我需要这样,因为 KennHennymid 不在 t2 内:

<div>Fris <b>1</b><b>GG</b><b>TTTTTT!</b></div>
<div>Kenn</div>
<div>Henny</div>

最佳答案

$teSTList 变量对于每个 $xzdt 都有不同的值,所以你的循环应该是:

$xzdtall = DB::fetch_all("SELECT * FROM t1 ORDER BY mid ASC");
foreach ($xzdtall as $xzdt){
    // empty $testlist
    $testlist = array();
    $testing = DB::fetch_all("SELECT * FROM t2 WHERE mid = $xzdt['mid'] ORDER BY tid ASC");
    foreach($testing as $test){
        $testlist[] = $test;
    }

    // add `$testlist` to $xzdt
    $xzdt['t2s'] = $testlist;

    $xzdtlist[] = $xzdt;
}

然后在你的模板中(不知道它是什么引擎)类似的东西应该可以工作:

<!--{loop $xzdtlist $xzdt}-->
<div>$xzdt[name] <!--{loop $xzdt[t2s] $test}--><b>$test[tcode]</b><!--{/loop}--></div>
                                 ^ notice variable here
<!--{/loop}-->

您还可以测试 $xzdt[t2s] 是否不为空。

最后,我建议您了解 mysql JOIN 并将您的循环查询替换为带有 JOIN 的单个查询。

关于php - foreach中的foreach?显示不正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39817819/

相关文章:

php - Laravel Mail::queue 错误:闭包序列化失败,即使是最基本的用法

php - mysql-db 请求 : how to get the db-name and the db-type as output of the request

mysql - 如何在 mysql 中记录错误查询?

c# - 循环遍历组合框的项目

php - 如何在 PHP 中循环遍历多维数组并按名称递归删除键?

php - 这可以在 1 行中完成吗?

php - 通知 : Undefined index: args

php - 此用例的 View 或有机组

mysql - Phpmyadmin中编写程序时出错

azure - 如何循环数据工厂中数据复制的结果