You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在foreach循环中判断采购日期,实现同日期结果同行打印?

实现同一采购日期结果同行打印的解决方案

我来给你梳理两种可行的实现方案,帮你搞定同一采购日期的结果同行打印的需求~

方法一:先按采购日期分组(推荐,逻辑更清晰)

核心思路是先把相同采购日期的记录归为一组,再循环每组打印成一行。这样不管原数组顺序如何,都能保证同一日期的内容在同一行。

第一步:在控制器中完成分组

先对获取到的$res数组按bill_date分组:

$groupedRes = [];
foreach($res as $row) {
    // 拿当前记录的采购日期作为分组键
    $dateKey = $row['bill_date'];
    // 如果该日期的分组不存在,先初始化空数组
    if (!isset($groupedRes[$dateKey])) {
        $groupedRes[$dateKey] = [];
    }
    // 将当前记录加入对应日期的分组
    $groupedRes[$dateKey][] = $row;
}

第二步:在视图中循环分组结果打印

现在每组对应一个采购日期,直接循环每组,把组内的所有内容拼接在同一行即可:

foreach($groupedRes as $date => $items) {
    // 开头先打印采购日期
    echo "<div class='same-date-row'>采购日期:{$date} ";
    // 循环打印当前日期下的所有记录内容
    foreach($items as $item) {
        // 这里替换成你实际要打印的字段,比如商品名、金额等
        echo "商品:{$item['goods_name']},金额:{$item['amount']} | ";
    }
    echo "</div>";
}

方法二:在原循环中跟踪上一次日期(无需提前分组)

如果不想提前分组,也可以在视图循环里记录上一次的采购日期,当日期变化时切换行。但必须保证原数组已经按bill_date排序,否则相同日期的记录可能分散在不同行。

第一步:先对数组按日期排序(控制器中处理)

如果原数组未排序,先在控制器中排序:

// 按采购日期升序排序(如果是时间戳格式也可以直接比较)
usort($res, function($a, $b) {
    return strcmp($a['bill_date'], $b['bill_date']);
});

第二步:在视图中循环并跟踪日期

// 初始化变量记录上一次的采购日期
$lastPurchaseDate = null;
// 先开启第一行的容器标签
echo "<div class='same-date-row'>";

foreach($res as $row) {
    $currentDate = $row['bill_date'];
    // 如果不是第一条记录,且当前日期和上一次不同,就关闭上一行并开启新行
    if ($lastPurchaseDate !== null && $currentDate != $lastPurchaseDate) {
        echo "</div><div class='same-date-row'>";
    }
    // 打印当前记录的内容
    echo "商品:{$row['goods_name']},金额:{$row['amount']} | ";
    // 更新上一次的日期为当前日期
    $lastPurchaseDate = $currentDate;
}
// 关闭最后一行的容器标签
echo "</div>";

关键注意点

  • 如果你用方法二,一定要确保数组按采购日期排序,否则相同日期的记录会被拆到不同行;
  • 打印的容器标签(比如<div>)可以根据你的页面需求换成<tr>(表格行)或者其他合适的标签;
  • 可以根据实际需求调整每行的内容格式,比如添加分隔符、样式类等。

内容的提问来源于stack exchange,提问作者Geetha Sekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:46:27