#1. Bài toán
Bạn cần lọc trùng 1 triệu ID từ 2 mảng. Nếu dùng in_array lồng nhau, bạn sẽ có O(n*m). Nếu dùng array_intersect, Laravel/PHP sẽ làm gì?
#2. Bản chất (Hashing)
array_unique: PHP dùng nội bộ mộtHashTableđể theo dõi các giá trị đã gặp. Chỉ tốn O(n).array_intersect: PHP xây dựng mộtHashTabletừ mảng thứ 2, sau đó lặp mảng 1 để kiểm tra sự tồn tại trongHashTableđó (O(n+m)).
#3. Kinh nghiệm thực chiến
- Đừng bao giờ lồng
in_arraybên trongforeach. Hãy luôn dùngarray_flipđể tạoHash Maptrước (biến Value thành Key). - Khi xử lý dữ liệu lớn, hãy dùng
Generatorkết hợp vớiHash Mapđể tiết kiệm RAM.
#4. Câu hỏi nhanh
Q: Tại sao array_flip lại giúp tăng tốc O(1)?
A: Vì PHP dùng Hash Table cho Array, truy cập qua Key là O(1), còn qua Value phải quét O(n). Đổi Value thành Key giúp ta sử dụng khả năng truy xuất thần tốc của Hash Table.