PHP 8.4: Dự kiến có thêm 4 hàm mới liên quan tới Array
Phiên bản PHP tiếp theo, 8.4, dự kiến sẽ có 4 hàm mới liên quan tới việc tìm kiếm trong array, giúp rút gọn code và tăng hiệu quả xử lý.
Có tới 4 hàm mới liên quan tới việc xử lý mảng (array) có khả năng cao sẽ xuất hiện trong PHP 8.4, mặc dù chúng vẫn đang còn ở giai đoạn biểu quyết RFC. Sở dĩ có sự kỳ vọng này là vì tất cả thành viên đều đồng ý và deadline cho việc biểu quyết là ngày 29/05/2024.
Do đó, mặc dù hội đồng chưa chốt nhưng ta hoàn toàn có thể tin rằn g PHP 8.4 sẽ là phiên bản đầu tiên mà những hàm này có mặt.
Bốn gương mặt mới là:
array_find()
array_find_key()
array_any()
array_all()
Cùng làm quen với những người bạn mới.
Hàm array_find()
Hàm array_find($array, $callback)
trả về giá trị của phần tử đầu tiên trong array mà với giá trị đó, $callback
trả về true
.
Đoạn code ví dụ:
$array = [
'a' => 'dog',
'b' => 'cat',
'c' => 'cow',
'd' => 'duck',
'e' => 'goose',
'f' => 'elephant'
];
array_find($array, function (string $value) {
return strlen($value) > 4;
}); // string(5) "goose"
array_find($array, function (string $value) {
return str_starts_with($value, 'f');
}); // null
// Tìm con thú đầu tiên có key trùng với ký tự đầu của tên.
array_find($array, function (string $value, $key) {
return $value[0] === $key;
});
Nếu sử dụng các helper Arr
hoặc Collection
của Laravel, chúng ta cũng có thể làm được điều tương tự với phương thức first()
đi kèm một callback.
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
$array = [
'a' => 'dog',
'b' => 'cat',
'c' => 'cow',
'd' => 'duck',
'e' => 'goose',
'f' => 'elephant'
];
new Collection($array)
->first(fn ($value) => strlen($value) > 4); // goose
Arr::first(
$array,
fn ($value) => str_starts_with($value, 'f')
); // null
new Collection($array)
->first(fn ($value, $key) => $value[0] === $key); // cow
Lưu ý rằng, trong ví dụ ở trên, chúng ta đã khởi tạo một Class mà không có đóng mở ngoặc nhọn:
new Collection($array)->first();
thay vì kiểu truyền thống từ trước tới nay:
(new Collection($array))->first();
tại vì từ PHP 8.4, cách làm này khả năng cao được hỗ trợ.
Hàm array_find_key()
Hoạt động cũng giống như array_find()
nhưng array_find_key($array, $callback)
lại trả về key (thay vì value) của phần tử đầu tiên trong mảng mà với nó, $callback
trả về true
. Nếu không có ai phù hợp, những gì chúng ta nhận được chỉ là null
mà thôi.
Đoạn code ví dụ:
$array = [
'a' => 'dog',
'b' => 'cat',
'c' => 'cow',
'd' => 'duck',
'e' => 'goose',
'f' => 'elephant'
];
array_find_key($array, function (string $value) {
return strlen($value) > 4;
}); // string(1) "e"
array_find_key($array, function (string $value) {
return str_starts_with($value, 'f');
}); // null
array_find_key($array, function (string $value, $key) {
return $value[0] === $key;
}); // string(1) "c"
Nếu sử dụng Collection
của Laravel, bạn có thể làm điều tương tự với phương thức search()
kết hợp với một closure. Tuy nhiên, search()
sẽ trả về false
chứ không phải null
nếu không tìm thấy kết quả nào.
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
new Collection($array)->search(function (string $value) {
return strlen($value) > 4;
}); // string(1) "e"
new Collection($array)->search(function (string $value) {
return str_starts_with($value, 'f');
}); // false
new Collection($array)->search(function (string $value, $key) {
return $value[0] === $key;
}); // string(1) "c"
Hàm array_any()
và array_all()
Phần thứ hai của RFC này là đề xuất bổ sung hai hàm: array_any()
và array_all()
.
- Hàm
array_any($array, $callback)
sẽ trả vềtrue
nếu có BẤT KỲ phần tử nào của mảng làm cho$callback
trả vềtrue
- Hàm
array_all($array, $callback)
sẽ chỉ trả vềtrue
nếu TẤT CẢ phần tử của mảng đều làm cho$callback
trả vềtrue
$array = [
'a' => 'dog',
'b' => 'cat',
'c' => 'cow',
'd' => 'duck',
'e' => 'goose',
'f' => 'elephant'
];
// Check xem có tên con thú nào có nhiều hơn 5 ký tự không
array_any($array, function (string $value) {
return strlen($value) > 5;
}); // bool(true)
// Check xem có tên con thú nào có ít hơn 3 ký tự không
array_any($array, function (string $value) {
return strlen($value) < 3;
}); // bool(false)
// Xác nhận rằng tất cả con thú đều có tên ít hơn 12 ký tự
array_all($array, function (string $value) {
return strlen($value) < 12;
}); // bool(true)
// Xác nhận rằng tất cả con thú đều có tên nhiều hơn 5 ký tự
array_all($array, function (string $value) {
return strlen($value) > 5;
}); // bool(false)
Đọc thêm
Bạn có thể đọc đầy đủ nội dung (tiếng Anh) của RFC này tại đây. Với mức độ tán thành tuyệt đối, có khả năng rất cao chúng sẽ xuất hiện trong PHP 8.4. Bạn cũng có thể xem nháp của đoạn code phục vụ cho việc này trong core của PHP tại GitHub.
PHP 8.4 dự kiến ra mắt chính thức vào ngày 21 tháng 11 năm 2024.
Nguồn:
- Paul Redmond, New Proposed Array Find Functions in PHP 8.4, Laravel News, May 21st, 2024