我认为这可能很简单,但我必须忽略一些事情。
基本上,我有If / Else php语句,检查条件是否为真。在每个if语句中,都是一个WHILE循环,它回显了我数据库中的所有相应行。
while循环需要打印一些表格单元格和行中的字段。目前,每个WHILE循环都会手动输入代码,这意味着如果我想更改布局或其他内容,我需要在每个while循环中更改它。
我想要做的是定义一个我可以回应的变量,这样我只需要在一个地方更改代码就可以影响所有WHILE循环。但是,WHILE循环内容的性质意味着这不会起作用,这就是原因:
//If the date is a monday
if($daycheck == "Monday") {
//Start a row and create cell with date in
echo "<tr><td height='100px' valign='top'>".$datedisplay."<br />";
//For each event found for this day
while($dayrow = mysql_fetch_assoc($dayresult)) {
//Show the event info
echo $dayrow['Event Time']."<br />".$dayrow['Event Name']."<br />";
}
//End the cell for the day
echo "</td>";
}
这是一个IF声明,但想象下面还有几个。您可以在中间看到我的WHILE循环,显示数据库中每行的字段。
问题是,如果我坚持:
$dayrow['Event Time']."<br />".$dayrow['Event Name']."<br />";
在while循环之前变成一个变量,当我回显它时,每次$ dayrow部分都不会更新时它会是相同的。
有没有什么方法可以将上面的内容放入变量中,以便每次WHILE循环运行时它都会更新?
也许如果$ dayrow [&#39;&#39;]部分以某种方式存储为文本而不是变量?
感谢您提供的任何帮助。
编
答案 0 :(得分:1)
正如DaveRandom建议你可以使用sprintf()
或(更多花哨和更多可能性)使用eval()
的模板系统。
答案 1 :(得分:0)
我对你的问题的理解很简单。你不想在循环的每次迭代中更新变量但想要追加以前的数据,这很简单
$data="";
if($daycheck == "Monday") {
$data .= "<tr><td height='100px' valign='top'>".$datedisplay."<br />";
while($dayrow = mysql_fetch_assoc($dayresult)) {
$data .= $dayrow['Event Time']."<br />".$dayrow['Event Name']."<br />";
}
$data .= "</td>";
echo $data;
};
`
答案 2 :(得分:0)
我建议您寻找一个好的模板系统并使用它而不是混合您的代码和视觉表示。
答案 3 :(得分:0)
所以这就是我使用sprintf()完成我所需要的:
设置我希望它显示的方式:
//Set the format to display the event details
$eventdisplay = "%s <br /> %s <br /><br />";
在每个WHILE循环中设置时间和名称的变量:
//Set the event time variable
$eventtime = $dayrow['Event Time'];
//Set the event name variable
$eventname = $dayrow['Event Name'];
最后,在WHILE循环中回显它:
//Print event details into preset format
echo sprintf($eventdisplay, $eventtime, $eventname);
这意味着我可以在文档中的任何位置设置$ eventdisplay,然后在每个循环中设置正确的时间和名称。然后使用sprintf()将这些格式化为$ eventdisplay变量,然后回显,
终极成就:
我可以在一个地方更改事件信息的布局,所有循环都将接收这些更改。
非常感谢大家的帮助和建议
编