【问题标题】:Loops reduction for simple restaurant menu function简单餐厅菜单功能的循环减少
【发布时间】:2020-12-07 21:27:45
【问题描述】:

我正在编写一个脚本来列出这周餐厅的菜单。我需要列出特定日期的 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>"; 

         }
      }
   }
}

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

【问题讨论】:

  • 这已经是一个非常干净的解决方案了,考虑到数组的结构很笨拙,而且您必须回显 HTML 元素。
  • 谢谢,我很感激。不幸的是,数组是 PDO fetchAll 函数的结果。但是,感谢@Taavi,我稍微更改了代码并保存了一个条件和 foreach 循环:)

标签: php arrays loops


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 2016-08-04
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多