用于HTML生成的PHP while循环:我应该在每次While循环迭代时检查数组值还是使用后循环字符串处理?

时间:2011-06-20 19:42:43

标签: php html performance

我正在编写一个PHP编写的html日历,该日历会在一个while循环内写入每月的每一天。

每月的每一天都在一对标签内,某些日子需要标签中的标题属性。那些日子将从MySQL数据库中获取并存储在如下数组中:$ array($ day_number => $ quantity)。

示例阵列可以是:(3 => 5,12 => 4,15 => 6,22 => 10,27 => 2,31 => 4)。该数组仅包含数量不为零的天数的密钥。

我可以想到两种方法来做到这一点。我想知道哪一个更有效率,或者是否有另一种最佳方式。

选项1.)在html创建循环的每次迭代中检查数组,看它是否包含相应的日期。如果是这样,请为标记添加适当的title属性。所以我会使用类似的东西:

$day = 1;
while($day < 31) {
if(array_key_exists($day,$array)) {
echo "<td title=\"$array['$day'] spots available\">$day</td>";
}
else echo "<td title\"No spots available for this date\">$day</td>";
$day++;
}

2.使用循环将整个日历放入字符串变量,然后使用字符串函数插入特殊标题属性。

$day = 1;
while($day < 31) {
$month .= "<td>$day</td>";
$day++;
}
foreach($array as $day_number=>$quantity) {
$month = str_replace("<td>$day_number</td>","<td title=\"$quantity spots available\">$day_number</td>",$month)
}

在这个应用程序中,任何一种方法都会很快完成,但我的问题更为笼统。在创建基本html的循环之后使用字符串函数,或者在每次迭代时检查/处理是否更好?或者有第三种,最好的方法吗?

我完全用自己的互联网资源学习PHP,所以我不知道我的编码有多糟糕。任何帮助表示赞赏。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是另一种解决方案:

$day = 1;
$strings = array();
while($day < 31) {
    if (array_key_exists($day, $array)) {
        $strings[$day] = $array['$day'] . " spots available";
    } else {
        $strings[$day] = "No spots available for this date";
    }
    $day += 1;
}
foreach ($strings as $day => $string) {
    echo '<td title="' . $string . '">' . $day . '</td>';
}

它有什么不同?好吧,首先,它可能比你的解决方案慢,因为我循环了31次,两次!但是这个例子非常简单,性能不是你主要考虑的问题。 您主要担心的是编写的代码非常简单,任何人都可以理解它。

如果你要进行大量的HTML打印,PHP代码会变得非常复杂。一般来说,你想做的是制作一些收集你所有数据的模型(adhoc或系统),并且只作为最后一步将它打印成HTML。

学习将数据收集和模型生成步骤与HTML打印步骤分开。这可能看起来有点矫枉过正,浪费CPU能力和内存,什么不是,但更昂贵的是:你的时间和理智还是某个服务器在某个温暖的房间? ;)


您选择只有具有可用点的日子的稀疏数组已经是优化。 过早优化是所有邪恶的母亲。考虑解决问题的最简单方法,构建它,无论如何都可能足够快。