【问题标题】:PHP better solution than for each loopPHP 比每个循环更好的解决方案
【发布时间】:2014-06-22 05:24:12
【问题描述】:

我有这个时间表,其中首先使用 while 循环从数据库中循环一堆成员。在while-loop 里面我有一个foreach-loop。然而,foreach-loops 使整个时间表变得非常缓慢,我需要一种不同的方法来解决这个问题。 现在的样子。

$sql = mysql_query("SELECT * FROM tblstaff ORDER BY strName ASC");

while($row = mysql_fetch_array($sql))
    {
$user_id = $row['intId'];

$arr = array($one, $two, $three, $four, $five, $six, $seven);

foreach ($arr as $w) {
$week = $w;                         

$sql_offtime = mysql_query("SELECT tbloffwork.intId, tbloffwork.intWhoId, tbloffwork.strWeek
FROM tblstaff, tbloffwork
WHERE tbloffwork.intWhoId = '$user_id' AND tbloffwork.strWeek = '$week'");
$rwOff = mysql_fetch_array($sql_offtime);

$sql_work = mysql_query("SELECT DISTINCT tblstaff.intId as staffId, tblstaff.strName, tblworktable.intId, tblworktable.intWhoId, tblworktable.strElapsed, tblworktable.strNotes
FROM tblstaff, tblworktable
WHERE tblworktable.intWhoId = '$user_id' AND tblworktable.strElapsed = '$week'");
$rw_work = mysql_fetch_array($sql_work);

if($rwOff['strWeek'] == $week) {

 $td_stat = "timetable-td-background-yellow";   

} elseif($rw_work['strElapsed'] != "") { 

 $td_stat = "timetable-td-background-green"; 

} else { 

     $td_week = "timetable-td-background-red"; 

}


if($rw_work['strNotes'] != ""){

 $notes = "<i class='fa fa-pencil-square-o mediumsmall'></i>";

} else { $notes = $null; }

echo "<td align='right' valign='top' id='timetable-td-small-square' class='". $td_week ."''>". $notes ."</td>";

} 

}

有没有更好的方法来解决这个问题而不是使用foreach 方法?

【问题讨论】:

  • 导致它变慢的原因不仅仅是使用 foreach 循环;它是你在循环中所做的,你没有准确发布。
  • ...尤其是每个用户的访问数据库
  • 请显示更多代码,包括两个循环。如果您可以取消嵌套循环,它可能会产生巨大的影响。
  • 我现在更新了,修改了一些变量名和数据库名,所以如果有类似的错误,那是我改变的原因
  • 您执行 2*7*N(其中 N 是用户数)查询而不是 2,所以是的,它必须很慢

标签: php arrays loops foreach while-loop


【解决方案1】:

foreach 复制集合,您可以使用 while 代替

while (list($key, $value) = each($arr)) {
    echo "Key: $key; Value: $value<br />\n";
}

http://php.net/manual/en/control-structures.foreach.php

【讨论】:

  • 谢谢,我试过了,但结果一样,很慢。也许是由于检查了循环内的数据库,我不确定。
猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多