减少循环,实现简单的餐厅菜单功能



我正在编写一个脚本,列出餐厅本周的菜单。我需要列出特定日期的4种菜肴,并在标题中注明日期和日期。

Monday 2020-12-07
- menu 1
- menu 2
- menu 3
- menu 4
Tuesday 2020-12-08
- menu 1
- menu 2
- menu 3
- menu 4
...

来自数据库的阵列

$menu = Array
(
[0] => Array
(
[day] => 2020-12-07
[meal] => Vývar
)
[1] => Array
(
[day] => 2020-12-07
[meal] => šošovicová
)
...

我写了这样的代码,但我不喜欢。


for ($i = 0; $i <= count($menu); $i++) {
$date = $menu[$i]['day'];
$compare_date;
if ($date != $compare_date) {
echo "<tr>";
echo "<td>" . date('l', strtotime($date)) . "</td>";
echo "<td>" . $date . "</td>";
echo "</tr>";
$compare_date = $date;
foreach($menu as $id) {
if ($id['day'] === $compare_date) {
echo "<tr>";
echo "<td>" . $id['meal'] . "</td>";
echo "</tr>"; 
}
}
}
}

我需要重构方面的帮助。我认为这样一个简单的菜单列表可以用更少的代码行完成,但我不知道怎么做。我已经坐在那里几个小时了,真的想不出什么了。请引导我走正确的路。

如果SQL查询中还没有order by day子句,请将其添加到SQL查询中。然后你可以用一个循环来完成。

类似这样的东西:

for ($i = 0; $i <= count($menu); $i++) {
$date = $menu[$i]['day'];
$compare_date;
echo "<tr><td>". ($date != $compare_date ? date('l Y-m-d', strtotime($date)) : ' - ') ."</td><td>" . $menu[$i]['meal'] . "</td></tr>";
$compare_date = $date;
}

最新更新