首頁  >  文章  >  後端開發  >  循環遍歷 組合從資料庫查出來的數據,效能不好,怎麼辦?

循環遍歷 組合從資料庫查出來的數據,效能不好,怎麼辦?

WBOY
WBOY原創
2016-08-04 09:19:021039瀏覽

需求:根據開始、截止時間統計每天的資料
現在的從資料庫查出來的資料大概有10個二維數組,結構相同 如下:

<code>[
    '0' => [
        'time' => '2016-8-3',
        'data1'=> 'xxx',
        ...
    ]
]</code>

因為每個數組中有需要的字段,所以要把這10個二維數組進行組合,思路如下:
根據日期遍歷取資料

<code>while (strtotime($start_time) < strtotime($end_time)) {
    
    // 10个foreach
    foreach($arr as $k => $v) {
        if (strtotime($start_time) == strtotime($v['time'])) {
            $data[] = $v[];
            ...
        }
    }
    
    foreach($arr as $k => $v) {
        if (strtotime($start_time) == strtotime($v['time'])) {
            $data[] = $v[];
            ...
        }
    }
    
    foreach($arr as $k => $v) {
        if (strtotime($start_time) == strtotime($v['time'])) {
            $data[] = $v[];
            ...
        }
    }
    ...

    $start_time = strtotime($start_time . ' +1 day');
    
}</code>

最後想組合成的資料結構:

<code>[
    '2016-8-3' => [
        'data' => '',
        ...
    ],
    
    '2016-8-4' => [
        'data' => '',
        ...
    ]
    ..
]</code>

可是看似那個while的性能很不好,跑不出數據,等待好久直接提示:
Maximum execution time of 30 seconds exceeded
各位大神有什麼好的建議嗎?

回覆內容:

需求:根據開始、截止時間統計每天的資料
現在的從資料庫查出來的資料大概有10個二維數組,結構相同 如下:

<code>[
    '0' => [
        'time' => '2016-8-3',
        'data1'=> 'xxx',
        ...
    ]
]</code>

因為每個數組中有需要的字段,所以要把這10個二維數組進行組合,思路如下:
根據日期遍歷取資料

<code>while (strtotime($start_time) < strtotime($end_time)) {
    
    // 10个foreach
    foreach($arr as $k => $v) {
        if (strtotime($start_time) == strtotime($v['time'])) {
            $data[] = $v[];
            ...
        }
    }
    
    foreach($arr as $k => $v) {
        if (strtotime($start_time) == strtotime($v['time'])) {
            $data[] = $v[];
            ...
        }
    }
    
    foreach($arr as $k => $v) {
        if (strtotime($start_time) == strtotime($v['time'])) {
            $data[] = $v[];
            ...
        }
    }
    ...

    $start_time = strtotime($start_time . ' +1 day');
    
}</code>

最後想組合成的資料結構:

<code>[
    '2016-8-3' => [
        'data' => '',
        ...
    ],
    
    '2016-8-4' => [
        'data' => '',
        ...
    ]
    ..
]</code>

可是看似那個while的表現很不好,跑不出數據,等待好久直接提示:
Maximum execution time of 30 seconds exceeded
各位大神有什麼好的建議嗎?

你的循環有問題,造成無盡循環了。你去打印下每次循環$start_time和$end_time到底是多少,肯定是strtotime($start_time) 永遠為真

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn