工做学习笔记_foreach_效率

    今天在工做中遇到一个需求,须要在数据表格中展现昨天与今天数据对比,我首先经过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秒。 以上是个人工做学习笔记记录,若有错误或其余指导意见,感谢你的评价。
相关文章
相关标签/搜索