【问题标题】:PHP is there a simpler and tidier way of doing this?PHP 有没有更简单和更整洁的方法来做到这一点?
【发布时间】:2011-11-27 11:34:47
【问题描述】:

我正在尝试创建一个菜单,用户可以在其中查看他们创建的菜单。该菜单包含一个下拉框,用户可以使用该下拉框按周过滤菜单。

然后菜单会显示一周中的 7 天以及五种用餐时间,即早餐、午餐、晚餐、布丁和小吃。以下是我目前的展示方式。

 $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>";

正如你所看到的,这个 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>";

以此类推,直到我拥有所有的日子和他们的用餐时间。

有没有办法在不进行所有这些迭代的情况下显示所有信息?

【问题讨论】:

  • 是的,您可以在数组中获得所需的所有信息。然后你开始输出。最好使用某种模板引擎。以 Smarty 为例。
  • ps。打印 - 比 echo 慢
  • @Userpassword 是的,我想,这将显着改善用户体验。一个不错的改进是使用 html 插值,并在与“查看”页面不同的部分进行查询。

标签: php database


【解决方案1】:

您有多种选择。您可以将输出放入一个函数中,然后使用不同的参数调用它。

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');

或者您可以使用不同的查询一次获取所有信息,然后循环访问:

$q = "SELECT title, mealtimeid, mealtimename 
      FROM ... 
      WHERE menu.weekid = '$selectweek' 
      ORDER BY menu.mealtimeid";

然后,您可以遍历结果,将它们组合成一个二维数组,例如,使用用餐时间名称作为键。例如

$mealInfo = array()

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

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

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 2017-05-13
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多