简单的php条件语句后很长的延迟

时间:2011-05-26 08:23:49

标签: php mysql

我有一个简单的php文件,该文件从MySQL数据库中获取行,删除特定部分的信息并将其分散到不同的部分。每个数据库条目都有一个应用于它的时间戳,我用它来对它们进行排序。当它们被放入$ sortholder变量时,时间戳和实际内容被“#”字符分隔开。在排序后,我使用strstr删除无用的时间字符直到#,然后substr删除#本身。由于某些数据库条目实际上没有时间戳,我想从列表中删除它们。为此,我只是创建了一个临时变量来保存$ sortholder的substr从0到2并检查是否($ temp!=“0#”)。

此语句有效并提供正确的输出,但由于某种原因,它会在处理前导致最多1分钟的延迟。如果我删除“if($ temp!=”0#“)”,它立刻就会消失。为什么这么简单的条件会造成如此长的延迟?

<?php
  include("dbsetup.php");
  $result = mysql_list_tables($dbname);
  $x=0;

  if (!$result)
  {
    echo "DB Error, could not list tables\n";
    echo 'MySQL Error: ' . mysql_error();
    exit;
  }

  while ($row = mysql_fetch_row($result))
  {
    // added code to use the tablename and select all records from that table
    $sql="select * from " . $row[0];
    $result2 = mysql_query($sql) or die ('SQL problem selecting from table');
    if (mysql_num_rows($result2) >= 1)
    {
      while ($row2 = mysql_fetch_row($result2))
      {
        for ($i=7; $i<mysql_num_fields($result2); $i+=7,$x++)
        {
          $sortholder[$x] = $row2[$i+1]."#<b>".$row2[$i-3].
                            ":</b> <br><br><br>".$row2[$i]."<br><br>";
        }
      }
      sort($sortholder);

      while ($x >= 0)
      {
        $temp = substr($sortholder[$x], 0, 2);
        if ($temp != "0#")
        {
          $tempstr = strstr($sortholder[$x], "#");
          echo substr($tempstr, 1);
          echo ("<div id=\"bookbar\"></div><br><br>");
          $x--;
        }
      }
    } else {
      echo ("Guest book empty"); 
    }
    mysql_free_result($result2);
  }

  mysql_free_result($result);
?>

2 个答案:

答案 0 :(得分:4)

我认为这不是条件本身需要时间,而是$x--

temp != "O#"未执行的事实

因此,如果$temp = substr($sortholder[$x], 0, 2);等于"0#",则会进入无限循环。

答案 1 :(得分:1)

这是因为这条线     $ x--; 大部分时间都没有运行。因为程序只在$ x&lt; 0和$ x只有在有时间戳的情况下递减时才退出循环。

所以,显然有很多字段没有时间戳,因此程序在实际进入和减少循环之前很多次都在评估if语句。