我正在尝试重写脚本以提高它的性能。目前,它是一个带有多个嵌入式ifs的switch语句。交换机检查$type
的值,ifs检查$unit
的值,然后在ifs内,要回显的行是从$message
数组构建的。
例如:
switch($type){
case 1234:
if($unit == "a"){
echo "<td>$message[2]</td>
<td>$message[5]</td>
...";
}elseif($unit == "b"){
...
}
...
$message
数组包含所需的所有信息,但具有不同的顺序,具体取决于$type
和$unit
,因此此检查会对订单进行排序。
这会导致页面加载速度变慢,尤其是加载了500多封邮件时。
我对此进行优化的尝试是创建一个多维数组,其中包含所有预先格式化的消息顺序,然后通过以下方式访问它:
echo $format[$type][$unit];
但由于我需要的数据是$message
数组,因此我不知道如何使用该数据。如果我将$format
声明放在生成$message
数组的同一循环中,只需调用$message[2]
等即可,但我觉得这会影响性能。
如何动态调用格式化内的数据?
修改
澄清,
$message
数组是通过爆炸从数据库中检索到的逗号分隔字符串创建的(我没有创建数据库,我很乐意修复这种方式,但我不能)。
$message
看起来像这样:
$message[2] //TimeStamp1
$message[3] //TimeStamp2
$message[4] //Could be a 1/0 for true/false, could be a float to resemble a necessary value
所以依据这个假设:对于$type
1234,$message[4]
应该被检索为1/0为真/假,但对于$type
5678 $message[4]
应该作为浮动检索:
if($type == 1234){
if($unit = "a"){
echo "<td>$message[2]</td>
<td>$message[3]</td>
<td></td>
<td></td>
<td>$message[4]</td>";
}elseif($unit = "b"){
echo "<td>$message[2]</td>
<td>$message[3]</td>
<td></td>
<td>$message[4]</td>
<td></td>";
}
}elseif($type = 5678){
if($unit = "a"){
echo "<td>$message[2]</td>
<td>$message[3]</td>
<td>$message[4]</td>
<td></td>
<td></td>";
}elseif($unit = "b"){
echo "<td>$message[2]</td>
<td>$message[3]</td>
<td></td>
<td></td>
<td>$message[4]</td>";
}
}
放置$message[4]
(和其他值)的位置取决于$type
和$unit
值。
答案 0 :(得分:0)
不是创建一个多维数组,而是简单地创建一个对象数组,使得你有键/值对,例如&#34; a&#34 ;: messageA,&#34; b&#34;:messageB,& #34; c&#34;:messageC等,其中一个对象带有键&#34; a&#34;,&#34; b&#34;和&#34; c&#34;在一个索引中。这样你只需循环这么多索引。