我正在使用PHP编写程序,需要列出按字符串长度排序的大型CSV文件值。 我目前正在使用(从法语重构为您的观看乐趣):
if (($process = fopen($CSV_file, "r")) !== FALSE)
{
$CSV_array = array();
while (($CSV_line = fgetcsv($process, ";")) !== FALSE)
{
$CSV_array = array_merge($CSV_array,$CSV_line);
}
fclose($process);
}
usort($CSV_array, function($a,$b) {return mb_strlen($b) - mb_strlen($a);});
Xdebug告诉我,usort占用了整个程序的近一半的计算时间(此处未显示)。你知道如何优化这段代码吗?
答案 0 :(得分:1)
如果不更改代码,第一步就是memoization:
的形式$array = array_map(function ($str) { return array($str, mb_strlen($str)); }, $array);
usort($array, function($a, $b) { return $b[1] - $a[1]; });
$array = array_map('current', $array);
这样你就不会一遍又一遍地为每个字符串调用mb_strlen
。