Heim  >  Artikel  >  Backend-Entwicklung  >  Beim Schleifendurchlauf werden die aus der Datenbank abgerufenen Daten kombiniert, aber die Leistung ist nicht gut. Was soll ich tun?

Beim Schleifendurchlauf werden die aus der Datenbank abgerufenen Daten kombiniert, aber die Leistung ist nicht gut. Was soll ich tun?

WBOY
WBOYOriginal
2016-08-04 09:19:021044Durchsuche

Anforderung: Statistik der täglichen Daten basierend auf Start- und Endzeit
Die aus der Datenbank abgerufenen aktuellen Daten bestehen aus etwa 10 zweidimensionalen Arrays mit der gleichen Struktur wie folgt:

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

Da es in jedem Array erforderliche Felder gibt, müssen diese 10 zweidimensionalen Arrays kombiniert werden. Die Idee ist wie folgt:
Daten basierend auf dem Datum durchlaufen und abrufen

<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>

Die endgültige Datenstruktur, die ich kombinieren möchte:

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

Aber es scheint, dass die Leistung dieser Zeit sehr schlecht ist und die Daten nicht ausgeführt werden können. Nach langem Warten wird direkt angezeigt:
Maximale Ausführungszeit von 30 Sekunden überschritten
Haben Sie Habt ihr gute Vorschläge?

Antwortinhalt:

Anforderung: Statistik der täglichen Daten basierend auf Start- und Endzeit
Die aus der Datenbank abgerufenen aktuellen Daten bestehen aus etwa 10 zweidimensionalen Arrays mit der gleichen Struktur wie folgt:

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

Da es in jedem Array erforderliche Felder gibt, müssen diese 10 zweidimensionalen Arrays kombiniert werden. Die Idee ist wie folgt:
Daten basierend auf dem Datum durchlaufen und abrufen

<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>

Die endgültige Datenstruktur, die ich kombinieren möchte:

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

Aber es scheint, dass die Leistung dieser Zeit sehr schlecht ist und die Daten nicht ausgeführt werden können. Nach langem Warten wird direkt angezeigt:
Maximale Ausführungszeit von 30 Sekunden überschritten
Haben Sie Habt ihr gute Vorschläge?

Es liegt ein Problem mit Ihrer Schleife vor, das zu einer Endlosschleife führt. Sie können die $start_time und $end_time jedes Zyklus ausdrucken. Es muss strtotime($start_time) < strtotime($end_time)immer wahr

sein
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn