© 2026 Laravel

Native Array Functions – Viết code nhanh hơn, sạch hơn, chuẩn functional

3 phút đọc 27 lượt xem

#Nguyên tắc cốt lõi

👉 Ưu tiên dùng hàm built-in thay vì foreach

👉 Vì chúng:

  • Viết bằng C → nhanh hơn
  • Code ngắn gọn hơn
  • Dễ đọc hơn

#Bad Example (Anti-pattern)

$activeUsers = [];
foreach ($users as $user) {
    if ($user->isActive()) {
        $activeUsers[] = $user;
    }
}

Vấn đề

  • Verbose
  • Lặp logic
  • Khó combine với các operation khác

#Good Example (Best Practice)

#1. Filter

$activeUsers = array_filter($users, fn(User $u) => $u->isActive());

#2. Map

$emails = array_map(fn(User $u) => $u->getEmail(), $users);

#3. Check existence

$hasAdmin = (bool) array_filter($users, fn(User $u) => $u->isAdmin());

#4. Combine operations

$activeEmails = array_map(
    fn(User $u) => $u->getEmail(),
    array_filter($users, fn(User $u) => $u->isActive())
);

#5. Reduce

$total = array_reduce(
    $orders,
    fn($sum, Order $o) => $sum + $o->getTotal(),
    0
);

#6. array_column

$userNames = array_column($userData, 'name', 'id');

#7. Spread operator

$merged = [...$defaults, ...$overrides];

#8. Sorting

usort($products, fn($a, $b) => $a->price <=> $b->price);

#Giải thích sâu

#1. Performance

  • Built-in viết bằng C → nhanh hơn loop PHP
  • Giảm overhead interpreter

👉 Nhưng không phải lúc nào cũng critical

#2. Functional style

array_map  transform
array_filter  select
array_reduce  aggregate

👉 Giống pattern trong functional programming

#3. Immutability

Hầu hết hàm trả về array mới

👉 Không mutate data → ít bug hơn

#4. Trade-off readability

array_map(fn(...) => ..., array_filter(fn(...) => ..., array_reduce(...)))

👉 Quá lồng nhau → khó đọc

#5. Big O vẫn giữ nguyên

👉 Không thay đổi complexity

  • O(n) vẫn là O(n)
  • Nhưng constant factor nhỏ hơn

#Tips & Tricks

#1. Rule đơn giản

👉 Simple loop → dùng array function 👉 Complex logic → dùng foreach

#2. Prefer readability

Tách step nếu chain dài

#3. Laravel Collection

collect($users)
    ->filter(fn($u) => $u->active)
    ->map(fn($u) => $u->email);

👉 Readable hơn array thuần

#4. Avoid in_array trong loop

👉 Dùng set (array_flip) để O(1)

#5. Memory consideration

  • array_map tạo array mới
  • Với data lớn → cần cân nhắc

#Interview Questions

1. Tại sao array function nhanh hơn foreach?

Summary:

  • Vì viết bằng C

Deep: Giảm overhead PHP interpreter → nhanh hơn

2. array_map vs foreach?

Summary:

  • array_map clean hơn

Deep:

  • array_map: functional, immutable
  • foreach: flexible hơn
3. Khi nào không nên dùng array function?

Summary:

  • Logic phức tạp

Deep: Nhiều điều kiện, side-effect → dùng foreach

4. array_reduce dùng khi nào?

Summary:

  • Aggregate

Deep: Sum, count, combine data

5. Có nên chain nhiều array function?

Summary:

  • Không quá nhiều

Deep: Chain dài → khó đọc, khó debug

#Kết luận

👉 Native array functions giúp:

  • Code sạch hơn
  • Dễ đọc hơn
  • Performance tốt hơn

Nhưng lạm dụng → code sẽ khó maintain