今天在工做中遇到一个需求,须要在数据表格中展现昨天与今天数据对比,我首先经过foreach嵌套来完成功能需求,具体过程以下:
1.经过数据库分别查询今天以及昨天的数据
//今天数据
$sql1 = "select tid,sum(total) as total from $table where tdate='2013-09-16' group by tid ";
$todayArr = mysql_query($sql1);
//昨天数据
$sql2 = "select tid,sum(total) as total from $table where tdate='2013-09-15' group by tid";
$yesArr = mysql_query($sql2);
//查询得到以下结构数组数据
$todayArr = array(
'0' => array(
'tid' => 1,
'total' => 123
),
'1' => array(
>'tid' => 1,
'total' => 321
)
...
'$foo' => array(
'tid' => $foo,
'total' => $foo
)
);
$yesArr = array(
'0' => array(
'tid' => 1,
'total' => 456
),
'1' => array(
'tid' => 1,
'total' => 654
)
...
'$foo' => array(
'tid' => $foo,
'total' => $foo
)
);
2.经过foreach嵌套组装须要的数组
foreach($todayArr as $key => $value){
foreach($yesArr as $k => $v){
//tid 为主键惟一值
if($value['tid']==$v['tid']){
$todayArr[$key]['yes_total'] = $v['total'];
}
}
}
这样编码是能够完成程序功能需求,可是当有实际的数据的量比较大时[我调试功能时的天数据是4000多条],这样子的嵌套就会有16000屡次的循环轮询,致使最终页面运行数据十分缓慢,我经过microtime计算代码的执行时间是17秒左右的[功能需求数据不分页查询]。
这样子就想到减小循环次数来提升页面执行速度,循环部分作了以下修改
foreach($todayArr as $key => $value){
foreach($yesArr as $k => $v){
if($value['tid']==$v['tid']){
$todayArr[$key]['yes_total'] = $v['total'];
break;
}
}
}
tid值惟一,当循环判断条件成立以后则后面条件必定不成立,跳出当前循环。这样的处理减小了循环的次数,页面响应速度能够提升1~2秒,可是仍是很慢。
接着想到,tid值惟一,对应惟一的key值,能够由昨天数组数据tid值来肯定昨天数据与今天数据的关联关系,循环部分修改代码以下
$fooArr = array();
foreach($todayArr as $key => $value){
$fooArr[$value['tid']] = $key;
}
foreach($yesArr as $key => $value){
$todayArr[$fooArr[$value['tid']]]['yes_total'] = $value['total'];
}
经过两次单个foreach循环,组装关联数组,肯定今天与昨天数据对应关系,验证如今页面响应数据大约为2s,提高了15秒。 以上是个人工做学习笔记记录,若有错误或其余指导意见,感谢你的评价。