我正在看一些在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()。
更新:我不想提高这个循环的性能,我认识到在这个过程之外移动方法会显着地提高性能。
发布于 2014-02-11 23:40:53
您应该在循环之外移动不变化的部分:
也许把last_name测试放在名字测试之前(如果每个人的名字都是"John",那么就会更快地失败,但是每个人都可以使用"McGuire“作为姓)。
$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))) {
}
}https://stackoverflow.com/questions/21715418
复制相似问题