我有一个简单的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);
?>
答案 0 :(得分:4)
我认为这不是条件本身需要时间,而是$x--
temp != "O#"
未执行的事实
因此,如果$temp = substr($sortholder[$x], 0, 2);
等于"0#"
,则会进入无限循环。
答案 1 :(得分:1)
这是因为这条线 $ x--; 大部分时间都没有运行。因为程序只在$ x&lt; 0和$ x只有在有时间戳的情况下递减时才退出循环。
所以,显然有很多字段没有时间戳,因此程序在实际进入和减少循环之前很多次都在评估if语句。