我之前已经看过这个问题,也许这是我需要传递给另一种语言的东西(理想情况下不是这样)但是我一直试图通过大型数组优化循环。
我有一个(可能)大的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
循环是最快的方法。
但我真的希望有一种更快的方式,我还没有发现。
作为参考,我在这个例子中经历了大约250k字,但这个数字在当天上升。
感谢任何帮助!
答案 0 :(得分:2)
跳出来的第一件事是您使用foreach
代替count
和for
循环。 for
之前的count
循环通常比foreach
循环快得多。有关测试结果,请参阅PHPBench.com。
此外,您可能最好使用二叉树,而不是关联数组。具有可能数千个元素的关联数组可能会导致巨大的内存和性能问题。
最后,正如其他人在评论中指出的那样,如果可能的话,缓存一些。如果您可以确定至少某些数据不会发生变化,那么这是一个定期执行的巨大计算。