我見過這個問題之前,也許這是我需要傳遞給另一種語言(理想情況下不),但我堅持試圖優化通過大型數組循環。PHP:加速一個非常大的循環
我有一個(可能)大2d數組,看起來像這樣。
[
['i am a string']
['i am also a string']
]
我需要遍歷數組並計算所有單詞的實例。
這是當前的循環。
$words = [];
foreach ($rows as $row) {
$text = explode(' ', $row);
foreach ($text as $word) {
if (isset($words[$word])) {
$words[$word]++;
continue;
}
$words[$word] = 1;
}
}
我已經與array_reduce
,array_map
測試這一點,將其轉換爲話單(塊狀)陣列,通過array_count_values
但到目前爲止,這foreach
循環是做它的最快方式。
但我真的希望有一種更快的方式,我還沒有發現。
作爲參考,在這個例子中,我經歷了大約25萬字,但是這個數字在一天中增加了。
任何幫助表示讚賞!
您是否在使用數據庫?你可以緩存結果,而不是每次都在飛行中計算它? – samlev
您可能想嘗試['str_word_count'](http://php.net/manual/en/function.str-word-count.php) - 可以由C函數支持,該函數比爆炸和循環更有效通過文字。但是,這又是一個PHP,它可以很好地支持一些真正可怕的事情。 – max
@samlev,我是,但從數據庫獲取它需要半秒鐘的時間,所以這不會造成足夠的備份來關注我。經過大量測試後,這個計數邏輯(以及所有其他我已經嘗試過的)會導致腳本運行很長時間。 – Scheda