【发布时间】:2018-10-23 16:26:39
【问题描述】:
我想知道内置的 PHP 数组函数,例如 array_diff、array_keys 或 array_values(与 array_walk 相比)是否遍历每个项目,或者它们是否有一个内部算法来进行计算一口气?
当我想学习如何优化处理 100,000 个项目的 PHP 脚本时,这一点很重要。
例如这个方法:
public function narrowDown($BigArray, $Column, $regex)
{
# narrowDown to focus on columns with similar data
$Column = array_column($BigArray, $Column);
$Search = preg_quote($regex, '~');
$Matched = preg_grep('~'.$Search.'~', array_combine(array_keys($BigArray), $Column));
# recreate rows by intersecting with specified keys
return array_intersect_key($BigArray, $Matched);
}
此方法通过正则表达式在多维数组中找出指定列中的相似行。 该数组有 18 列和 100,000 个项目。我在想什么应该是优化这些方法的最佳方式。
如果我应该改用其他编程语言,请随时提出建议。
【问题讨论】:
-
他们遍历数组中的每一项
-
那么这段代码很慢,我宁愿做一个
foreach循环对吗? @IlyaBursov -
是的,foreach 将通过数组进行单次扫描,当前函数至少执行 4 次
-
只需尝试两种方式并对其进行基准测试。一些
array_*-函数比手动foreach慢,有些更快。自己测试总是最安全的。在这种情况下你真的需要正则表达式吗?这肯定会减慢速度
标签: php arrays optimization