strtolower(trim())== strtolower(trim())很慢

时间:2014-02-11 23:26:22

标签: php regex

我正在查看一些处理CSV中约7k项目的代码。 CSV导入器检查重复项,并且该过程的一部分是针对每行检查已处理重复项的所有其他行。这意味着它有点像......

foreach ($users as $possibleDuplicate) {
    if (strtolower(trim($user->first_name)) == strtolower(trim($possibleDuplicate->first_name)) && strtolower(trim($user->last_name)) == strtolower(trim($possibleDuplicate->last_name))) {

    }
}

忽略在这个脚本上实施的可怕的执行思想(我没有写它)。 strtolower(trim())似乎对我的导入产生了相当大的影响。我一直在寻找更高效,更快速的替代品。我还没有做过任何性能测试,但计划到明天。我希望这里的某些人能够对他们已经掌握的关于preg_match()更快的方法的一些信息有所了解。

更新:我不打算提高此循环的性能,我认识到在foreach之外移动方法会显着提高性能。

1 个答案:

答案 0 :(得分:2)

你应该移动在循环之外不变的部分:

并且可能在第一次名称测试之前放置last_name测试(如果每个人都有名字&#34; John&#34;则会更快失败,但是每个人都可以拥有&#34; McGuire&#34;作为姓氏)< / p>

$userFirstNameLower = strtolower(trim($user->first_name));
$userLastNameLower = strtolower(trim($user->last_name));
foreach ($users as $possibleDuplicate) {
    if ( $userLastNameLower == strtolower(trim($possibleDuplicate->last_name)) && $userFirstNameLower == strtolower(trim($possibleDuplicate->first_name))) {

    }
}