1. Hàm array_reduce() trong PHP

Hàm array_reduce() trong PHP được dùng để thực hiện các thao tác xử lý trong hàm callback với mảng được truyền vào. Hàm array_reduce() sẽ tính toán các phần tử của mảng dựa vào hàm chức năng được truyền vào do người dùng định nghĩa. Sau đó hàm array_reduce() sẽ tiến hành giảm mảng theo cách lặp lại thành một giá trị duy nhất bằng cách sử dụng hàm callback .

Kết quả trả về sẽ tùy chỉnh với hàm callback do người dùng truyền vào. Giá trị cuối cùng có thể là mang những kiểu Float , Integer hoặc String . Nếu mảng được truyền vào là mảng rỗng thì hàm sẽ trả về Null . Hàm được giới thiệu và sử dụng từ phiên bản PHP 4.0.5

2. Cú pháp hàm array_reduce() trong PHP

Ta có cú pháp hàm array_reduce() trong PHP là :

array_reduce($array, own_function, $initial)

Trong đó :

  • $array : là mảng đầu vào cần xử lý. Đây là tham số bắt buộc trong hàm
  • own_function : đề cập đến hàm callback do người dùng xác định và sử dụng với $array . Tham số này cũng là bắt buộc trong hàm
  • $initial : xác định value ban đầu để gửi tới hàm. Tham số này là không bắt buộc có trong hàm

Hàm array_reduce() áp dụng lặp đi lặp lại hàm callback cho các phần tử của $array , để giảm mảng xuống một giá trị duy nhất và trả về kết quả đã giảm tùy thuộc vào hàm callback . Giá trị có thể là bất kỳ kiểu Float , Integer hoặc String . Nếu giá trị $intial xuất hiện thì hàm array_reduce() sẽ tự hiểu và cho nó xuất hiện đầu tiên ở kết quả trả về.

Nếu như mảng đầu vào rỗng và giá trị $initial không được truyền thì hàm sẽ trả về Null

Ví dụ : xử lý một mảng với hàm callback và trả về một chuỗi

<?php
function myfunction($v1,$v2)
{
return $v1 . "-" . $v2;
}
$a=array("PHP","Java","Python");
var_dump(array_reduce($a,"myfunction"));
?>

Kết quả

string(16) "-PHP-Java-Python"

Trong ví dụ này hàm myfunction được dùng để nối các phần tử trong mảng lại với nhau. Các phần tử sẽ được nối với nhau bởi dấu gạch ngang ” – ” . Kết quả trả về là một chuỗi chứa tất cả giá trị của mảng ban đầu và được nối với nhau bởi dấu gạch ngang. Ở ví dụ này với hàm array_reduce() mình không truyền thêm tham số thứ ba.

3. Ví dụ về hàm array_reduce() trong PHP

Ví dụ 1: trả về tổng của mảng ban đầu

<?php
function myfunction($v1,$v2)
{
return $v1+$v2;
}
$a=array(10,15,20);
var_dump(array_reduce($a,"myfunction",5));
?>

Kết quả

int(50)

Trong ví dụ này mình đã truyền thêm tham số thứ ba trong hàm array_reduce()5. Hàm array_reduce() sẽ lấy giá trị ban đầu là 5 rồi sau đó cộng với các giá trị có trong mảng theo cách lặp lại trong hàm myfunction() . Sau khi lặp lại hết các phần tử trong mảng (ta có thể hiểu là cộng xong) thì giá trị ta thu về là 50.

Ví dụ 2: một mảng các phần tử nguyên được giảm xuống thành một giá trị chuỗi đơn

<?php
function own_function($element1, $element2)
{
    return $element1 . " và " . $element2;
}
 
$array = array(15, 120, 45, 78);
var_dump(array_reduce($array, "own_function", "Start"));
?>

Kết quả

string(34) "Start và 15 và 120 và 45 và 78"

Ví dụ 3

<?php
function myfunction($v1,$v2)
{
return $v1 . "-" . $v2;
}
$a=array("PHP","Java","Python");
var_dump(array_reduce($a,"myfunction",5));
?>

Kết quả

string(17) "5-PHP-Java-Python"

Trong ví dụ 2 và 3 ta đã giảm mảng ban đầu thành một chuỗi giá trị đơn. Kèm theo đó là giá trị ban đầu mà ta muốn có trong chuỗi giá trị đơn. Lúc này hàm array_reduce() sẽ hiểu là phải đặt giá trị đầu tiên của chuỗi là 5. Tiếp theo là lặp lại các phần tử trong mảng như bình thường. Kết quả cuối cùng là một chuỗi như trên.

Ví dụ 4: truyền vào một mảng rỗng

<?php
function myfunction($v1,$v2)
{
return $v1 . "-" . $v2;
}
$a=array();
var_dump(array_reduce($a,"myfunction"));
?>

Kết quả

NULL

Tuy nhiên nếu ta truyền thêm tham số thứ ba cho hàm array_reduce() thì kết quả trả về chính là giá trị này.

<?php
function myfunction($v1,$v2)
{
return $v1 . "-" . $v2;
}
$a=array();
var_dump(array_reduce($a,"myfunction",5));
?>

Kết quả

int(5)