PHP有没有更简单、更整洁的方法?

PHP有没有更简单、更整洁的方法?,php,database,Php,Database,我正在尝试创建一个菜单,用户可以在其中查看他们创建的菜单。菜单由一个下拉框组成,用户使用该下拉框按周筛选菜单 然后,菜单会显示一周中的七天以及五种用餐时间,即早餐、午餐、晚餐、布丁和点心。下面是到目前为止我是如何展示它的 $sqlmeasurement = mysql_query("SELECT title FROM recipe JOIN menu ON recipe.recipeid = menu.recipeid WHERE menu.weekid = '".$selectweek."'

我正在尝试创建一个菜单,用户可以在其中查看他们创建的菜单。菜单由一个下拉框组成,用户使用该下拉框按周筛选菜单

然后,菜单会显示一周中的七天以及五种用餐时间,即早餐、午餐、晚餐、布丁和点心。下面是到目前为止我是如何展示它的

 $sqlmeasurement = mysql_query("SELECT title FROM recipe JOIN menu ON recipe.recipeid = menu.recipeid WHERE menu.weekid = '".$selectweek."' AND menu.mealtimeid = '1'") or die(mysql_error()); 
 Print '<table border="0">
    <tr>
      <th width="100"> </th>
      <th width="200">Monday</th>
    </tr>'; 
    echo "<tr>";
    echo "<td><strong>Breakfast</strong></td>";
    echo "<td>";
 while($info = mysql_fetch_array( $sqlmeasurement )) 
 { 
    echo $info['title']; 
   echo "<br/>";
 } 
 echo "</td> ";
 echo "</tr>"; 
 echo "</table>";
$sqlmeasurement=mysql_query(“从recipe.recipeid=menu.recipeid WHERE menu.weekid='”“$selectweek.”和menu.mealtimeid='1'”上的配方连接菜单中选择标题)或die(mysql_error());
印刷品
星期一
'; 
回声“;
回声“早餐”;
回声“;
而($info=mysql\u fetch\u数组($sqlmeasurement))
{ 
echo$info['title'];
回声“
”; } 回声“; 回声“; 回声“;
正如您可以看到的,这个PHP语句从表中选择了我想要的内容,但因为每周有7天,有5种类型的用餐时间,这意味着我必须复制此代码35次,才能显示我想要的所有内容

例如,下一位代码如下所示:

 $sqlmeasurement2 = mysql_query("SELECT title FROM recipe JOIN menu ON recipe.recipeid = menu.recipeid WHERE menu.weekid = '".$selectweek."' AND menu.mealtimeid = '2'") or die(mysql_error()); 
 Print '<table border="0">';

    Print '<tr>
      <th width="100"> </th>
      <th width="200"> </th>
    </tr>';
    echo "<tr>";
    echo "<td><strong>Lunch</strong></td>";
    echo "<td>";
 while($info2 = mysql_fetch_array( $sqlmeasurement2 )) 
 { 
    echo $info2['title']; 
   echo "<br/>";
 } 
 echo "</td> ";
 echo "</tr>"; 
 echo "</table>";
$sqlmeasurement2=mysql\u query(“从recipe.recipeid=menu.recipeid WHERE menu.weekid='”“$selectweek.”和menu.mealtimeid='2'”上的配方连接菜单中选择标题)或die(mysql\u error());
打印“”;
印刷品
';
回声“;
回声“午餐”;
回声“;
而($info2=mysql\u fetch\u数组($sqlmeasurement2))
{ 
echo$info2['title'];
回声“
”; } 回声“; 回声“; 回声“;
等等,直到我有了所有的日子和吃饭时间


有没有一种方法可以显示所有信息,而不必进行所有的迭代?

您有多种选择。您可以将输出放入函数中,并使用不同的参数调用该函数

function ouptutMeal($selectweek, $mealtime, $mealname) {
    $sqlmeasurement2 = mysql_query("SELECT ... WHERE menu.weekid = '$selectweek' AND menu.mealtimeid = '$mealtime'");

    echo "<table>
            <tr>
              <th> </th>
              <th> </th>
           </tr>
           <tr>
             <td><strong>$mealname</strong></td>
             <td>";
    while($info2 = mysql_fetch_array( $sqlmeasurement2 )) { 
        echo $info2['title'], '<br/>';
    } 
    echo    '</td>
           </tr>
         </table>';
}

ouptutMeal($selectweek, 1, 'breakfast');
ouptutMeal($selectweek, 2, 'lunch');
然后,您可以遍历结果,将它们组合成一个二维数组,该数组基于使用mealtimename作为键。e、 g

$mealInfo = array()

while($info = mysql_fetch_array( $result )) { 
    $mealInfo[$info['mealtimename'][] = $info;
} 

foreach ($mealInfo as $mealName => $mealData) {
    ouptutMeal($mealName, $mealData);
}

是的,你可以在一个数组中获得你需要的所有信息。然后开始输出。最好使用某种模板引擎。例如Smarty.ps。打印-比这慢吗echo@Userpassword是的,我想,一些超乎寻常的微秒将极大地改善用户体验。一个很好的改进是使用html插值,并在“视图”页面之外的单独部分执行查询。
$mealInfo = array()

while($info = mysql_fetch_array( $result )) { 
    $mealInfo[$info['mealtimename'][] = $info;
} 

foreach ($mealInfo as $mealName => $mealData) {
    ouptutMeal($mealName, $mealData);
}