工做學習筆記_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秒。 以上是個人工做學習筆記記錄,若有錯誤或其餘指導意見,感謝你的評價。
相關文章
相關標籤/搜索