前言
PHP 8.4 將於 2024 年 11 月發布,並將引入一些方便的陣列函數(array function):
array_find
array_find_key
array_any
array_all
如果你/妳曾使用過 Laravel 框架進行開發,這些函數的功能會與 Illuminate\Support\Collection
和 Illuminate\Support\Arr
中的部分函數與方法類似。而現在他們有了原生 PHP 的支持!在本文中將快速瀏覽這些新函數,以及說明如何在執行 PHP 8.4 的專案中使用它們。
array_find()
函數
在 Laravel 中,我們可以使用 Arr:first
從給定陣列中找到第一個符合條件的元素,當找不到符合回調函數(callback function)時,則返回 null
值:
use Illuminate\Support\arr;
$findProduct = Arr::first(
$products,
fn (array $product): bool => $product['barcode'] === 5566,
);
而在 PHP 8.4 中,上述的程式碼可以改成這樣實現:
$findProduct = array_find(
array: $products,
callback: fn (array $product): bool => $product['barcode'] === 5566,
);
array_find_key()
函數
在 Laravel 中,有時候我們想要取得的是符合條件元素的鍵(key),此時可以簡單地調整回調函數中的內容:
use Illuminate\Support\Arr;
$firstProductKey = Arr::first(
array_keys($products),
fn (int $key): bool => $products[$key]['barcode'] === 5566,
);
而在 PHP 8.4 中,可以使用 array_find_key()
來處理,寫法更加地直觀:
$findProduct = array_find_key(
array: $products,
callback: fn (array $product): bool => $product['barcode'] === 5566,
);
array_any()
函數
在 Laravel 中,我們可以使用 Collection
物件的 contains()
方法,來檢查給定的陣列中,是否至少含有一項滿足條件的元素:
use Illuminate\Support\Collection;
$anyProductsAreCameras = Collection::make($products)->contains(
fn (array $product): bool => $product['type'] === 'Camera',
);
而在 PHP 8.4 中,可以使用 array_any
來實現:
$anyProductsAreCameras = array_any(
array: $products,
callback: fn (array $product): bool => $product['type'] === 'Camera',
);
array_all()
函數
在 Laravel 中,我們可以使用 Collection
物件的 every()
方法,來檢查給定的陣列中,是否所有元素都滿足指定條件:
use Illuminate\Support\Collection;
$allProductsAreLaptops = Collection::make($products)->every(
fn (array $product): bool => $product['type'] === 'Laptop',
);
而在 PHP 8.4 中,可以使用 array_all
來實現:
$allProductsAreLaptops = array_all(
array: $products,
callback: fn (array $product): bool => $product['type'] === 'Laptop',
);