Tôi có một tập lệnh PHP đọc một tệp CSV lớn và thực hiện các hành động nhất định, nhưng chỉ khi trường "tên người dùng" là duy nhất. CSV được sử dụng trong nhiều hơn một tập lệnh, do đó việc thay đổi đầu vào từ CSV thành chỉ chứa tên người dùng duy nhất không phải là một tùy chọn.Giữ một mảng được sắp xếp theo PHP
Các chương trình rất cơ bản (mà tôi đang tự hỏi về) dòng chảy đi như thế này:
$allUsernames = array();
while($row = fgetcsv($fp)) {
$username = $row[0];
if (in_array($username, $allUsernames)) continue;
$allUsernames[] = $username;
// process this row
}
Kể từ CSV này thực sự có thể là khá lớn, đó là in_array
chút trong đó có tôi đã suy nghĩ. Tình huống lý tưởng nhất khi tìm kiếm thông qua một mảng cho một thành viên là nếu nó đã được sắp xếp, do đó, làm thế nào bạn sẽ xây dựng một mảng từ đầu, giữ nó theo thứ tự? Một khi nó là theo thứ tự, sẽ có một cách hiệu quả hơn để tìm kiếm nó hơn bằng cách sử dụng in_array()
, xem xét rằng nó có lẽ không biết mảng được sắp xếp?
hoặc array_key_exists? – dylanfm
Đúng, bạn cũng có thể làm điều đó, nhưng tôi vẫn đánh giá sự khác biệt giữa hai điều đó. Bạn không bao giờ biết với PHP - một trong những có thể là O (1), trong khi O (n) ... (đề cập đến "làm array_flip() hai lần" lừa) –
Tôi muốn nói nó là "array_key_exists()". Mảng PHP là băm, chúng được tối ưu hóa cho loại công cụ truy cập ngẫu nhiên này. – Tomalak