【问题标题】:updating a php variable that is already set更新已设置的 php 变量
【发布时间】:2012-08-28 23:58:12
【问题描述】:

我认为这可能真的很简单,但我一定忽略了一些东西。

基本上,我有 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[''] 部分以某种方式存储为文本而不是变量?

感谢您提供的任何帮助。

编辑

【问题讨论】:

  • 当你 var_dump($dayrow) 你得到什么???
  • 首先,我认为您的问题的主要部分是您在每个循环中使用不同的变量名。是什么阻止您在每个循环中只调用变量$row?其次,请注意sprintf() - 它会改变您对此类事情的整体看法。
  • 如果我执行 $dayrow 的 var_dump,我会得到一个包含该行所有字段和值的数组,但前提是我从 while 循环中执行转储
  • @daverandom 每个 if 语句中的每个 while 循环每次都会包含完全相同的内容,这就是为什么我尝试将其存储为一个可以更改以影响所有循环的变量。如果您的意思是我调用 $dayrow['Event Time'] 和 ['Event Name'],那是因为这些值是需要分隔的数组的一部分。

标签: php mysql variables if-statement while-loop


【解决方案1】:

这就是我使用 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 变量,然后回显,

最终成就:

我可以在一处更改事件信息的布局,所有循环都会收到这些更改。

非常感谢大家的帮助和建议

编辑

【讨论】:

    【解决方案2】:

    正如 DaveRandom 建议的那样,您可以使用 sprintf() 或(更花哨和更多可能性)使用 eval() 的模板系统。

    【讨论】:

    • 好吧,看看 sprintf(),它似乎非常理想。然而 eval() 没有那么有用,allow 有更大的潜力。它的问题是,我仍然需要在每个循环中提供要评估的字符串。如果我在循环开始之前定义它,它不会正确插入行变量。
    【解决方案3】:

    我建议您寻找一个好的模板系统并使用它,而不是混合您的代码和视觉表示。

    例如: http://twig.sensiolabs.org/

    【讨论】:

      【解决方案4】:

      我对您的问题的理解很简单。您不想在循环的每次迭代中更新变量,而是想附加以前的数据,这很简单

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

      `

      【讨论】:

      • 不完全。我不想附加任何内容,我想在每个 while 循环中包含 $dayrow['Event Time'] 和 $dayrow['Event Name'] 以及
        。但是,我不想在每个 while 循环中手动编辑这一行,我希望能够只更改一次并影响所有 while 循环
      猜你喜欢
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多