Trong PHP, array_map(), array_walk(), và array_filter() là ba hàm rất hữu ích để làm việc với mảng. Mỗi hàm có cách hoạt động và mục đích riêng biệt. Dưới đây là sự khác biệt giữa chúng:

1. array_map()

  • Chức năng: Áp dụng một hàm cho từng phần tử của mảng và trả về một mảng mới với kết quả.
  • Cú pháp: array_map(callable $callback, array $array1[, array $...])
  • Trả về: Mảng mới với các giá trị đã được thay đổi bởi hàm callback.
  • Sử dụng: Khi bạn muốn biến đổi các giá trị trong mảng.

Ví dụ:

$numbers = [1, 2, 3, 4];
$squared = array_map(fn($n) => $n * $n, $numbers); // [1, 4, 9, 16]

2. array_walk()

  • Chức năng: Áp dụng một hàm cho mỗi phần tử của mảng, nhưng không trả về mảng mới. Thay vào đó, nó thay đổi mảng gốc.
  • Cú pháp: array_walk(array &$array, callable $callback[, mixed $userdata])
  • Trả về: Không trả về giá trị, nó thực hiện thao tác trên mảng gốc.
  • Sử dụng: Khi bạn muốn thực hiện một hành động nào đó trên mỗi phần tử của mảng mà không cần tạo ra mảng mới.

Ví dụ:

$fruits = ["apple", "banana", "cherry"];
array_walk($fruits, fn(&$item) => $item = strtoupper($item)); // $fruits: ["APPLE", "BANANA", "CHERRY"]

3. array_filter()

  • Chức năng: Lọc các phần tử của mảng dựa trên một hàm callback. Chỉ những phần tử trả về true từ hàm callback mới được giữ lại trong mảng.
  • Cú pháp: array_filter(array $array, callable $callback = null, int $mode = 0)
  • Trả về: Mảng mới chỉ chứa các phần tử đã qua kiểm tra.
  • Sử dụng: Khi bạn muốn lọc ra các phần tử không đáp ứng điều kiện nhất định.

Ví dụ:

$numbers = [1, 2, 3, 4, 5];
$evenNumbers = array_filter($numbers, fn($n) => $n % 2 === 0); // [2, 4]

Tóm tắt:

  • array_map(): Biến đổi các giá trị và trả về mảng mới.
  • array_walk(): Thực hiện thao tác trên các giá trị mà không trả về mảng mới.
  • array_filter(): Lọc các phần tử của mảng dựa trên điều kiện và trả về mảng mới chỉ chứa các phần tử thỏa mãn.

Sự lựa chọn giữa ba hàm này phụ thuộc vào nhu cầu cụ thể của bạn trong việc xử lý mảng.