PHP:加速一个非常大的循环

时间:2015-10-15 13:35:43

标签: php arrays

我之前已经看过这个问题,也许这是我需要传递给另一种语言的东西(理想情况下不是这样)但是我一直试图通过大型数组优化循环。

我有一个(可能)大的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_reducearray_map对其进行了测试,将其转换为单个(大量)单词数组并使用array_count_values但到目前为止这个foreach循环是最快的方法。

但我真的希望有一种更快的方式,我还没有发现。

作为参考,我在这个例子中经历了大约250k字,但这个数字在当天上升。

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

跳出来的第一件事是您使用foreach代替countfor循环。 for之前的count循环通常比foreach循环快得多。有关测试结果,请参阅PHPBench.com

此外,您可能最好使用二叉树,而不是关联数组。具有可能数千个元素的关联数组可能会导致巨大的内存和性能问题。

最后,正如其他人在评论中指出的那样,如果可能的话,缓存一些。如果您可以确定至少某些数据不会发生变化,那么这是一个定期执行的巨大计算。