我有一个PHP脚本,它读取大型CSV并执行某些操作,但前提是"用户名"字段是唯一的.CSV用于多个脚本,因此将输入从CSV更改为仅包含唯一用户名不是一种选择.
最基本的程序流程(我想知道)是这样的:
$allUsernames = array(); while($row = fgetcsv($fp)) { $username = $row[0]; if (in_array($username, $allUsernames)) continue; $allUsernames[] = $username; // process this row }
由于这个CSV实际上可能非常大,所以这in_array
一点让我思考.在数组中搜索成员时最理想的情况是它是否已经排序,那么如何从头开始构建数组,保持它的顺序?一旦它按顺序排列,是否有更有效的搜索方式而不是使用in_array()
,考虑到它可能不知道数组是否已排序?
不保持数组的顺序,但这种优化怎么样?我猜测isset()
数组键应该比in_array()
搜索更快.
$allUsernames = array(); while($row = fgetcsv($fp)) { $username = $row[0]; if (isset($allUsernames[$username])) { continue; } else { $allUsernames[$username] = true; // do stuff } }