PHP(NETTE)按对象值对对象数组进行分组的实现方法
在Nette框架中按日期分组数据库对象数组
嘿,我来帮你搞定这个按日期分组的需求!其实思路很简单:先把从数据库拿到的对象数组按datum字段归类,再把分组后的内容输出成你想要的格式就行。
第一步:在Presenter中处理分组逻辑
假设你已经从数据库获取到了目标数组$items(就是你给出的那组对象数据),可以在Presenter里做分组处理:
public function renderDefault() { // 这里替换成你从数据库获取数据的代码,比如用Repository $items = $this->cestyRepository->findAll(); // 初始化分组数组 $groupedByDate = []; // 遍历原始数据,按日期归类 foreach ($items as $item) { $date = $item->datum; // 如果当前日期的分组还没创建,先初始化空数组 if (!isset($groupedByDate[$date])) { $groupedByDate[$date] = []; } // 将当前条目CestyNazev加入对应日期的分组 $groupedByDate[$date][] = $item->CestyNazev; } // 可选:对日期排序,比如按从新到旧排列 krsort($groupedByDate); // 把分组后的数据传给模板 $this->template->groupedByDate = $groupedByDate; }
第二步:在Latte模板中输出格式
接下来在对应的Latte模板里,把分组后的数据渲染成你想要的样式:
{foreach $groupedByDate as $date => $codes} *{$date}* {implode(' ', $codes)}<br> {/foreach}
这样输出的结果就完全符合你的预期:
2018-03-27 K00301 K00302
2018-03-26 KLA101
2018-03-29 KLA102
如果你需要更复杂的HTML样式,比如用列表或者自定义容器,只需要修改模板里的输出结构就行啦。
内容的提问来源于stack exchange,提问作者Frederik Fako
相关产品推荐
相关产品推荐

