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


PHP while loop for HTML Generation: Should I Check Array values at each While Loop Iteration or use Post-Loop String Processing?

我正在开发一个PHP编写的html日历,它将一个月中的每一天都写在while循环中。

一个月中的每一天都在一对标签中,某些日子需要标签中的title属性。这些天将从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的,所以我不知道我的代码有多糟糕。任何帮助都将不胜感激。

谢谢。

这里有另一个解决方案:

$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代码会变得非常复杂。通常,你想做的是创建某种模型(即席或系统),收集所有数据,并在最后一步将其打印到HTML中。

学习将数据收集和模型生成步骤与HTML打印步骤分开。这可能看起来有些过头了,浪费了CPU功率和内存,但更昂贵的是:你的时间和理智,还是某个服务器在某个热房间里?)


您选择只有点可用的天数的稀疏阵列已经是一种优化。而过早优化是万恶之母。想想最简单的方法来解决你的问题,建立它,它可能足够快。