PHP - 按长度优化排序字符串

时间:2015-05-18 12:02:45

标签: php performance sorting csv optimization

我正在使用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占用了整个程序的近一半的计算时间(此处未显示)。你知道如何优化这段代码吗?

1 个答案:

答案 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