PHP 8.4 中的新数组函数
介绍
PHP 8.4 预计将于 2024 年 11 月发布,带来了一些令人期待的新特性,尤其是几项便捷的数组函数。本文将带您快速了解这些新函数,并展示如何在 PHP 8.4 项目中应用它们。
函数 array_find
array_find
用于在数组中查找第一个符合条件的元素并返回其值。如果没有匹配的元素,则返回 null
。
示例
$products = [
['name' => 'Macbook Pro', 'type' => 'Laptop', 'barcode' => 123456],
['name' => 'Framework Laptop 13', 'type' => 'Laptop', 'barcode' => 789012],
['name' => 'Samsung Galaxy S24', 'type' => 'Phone', 'barcode' => 135791],
];
// 查找条形码为 123456 的产品
$findProduct = array_find(
array: $products,
callback: fn(array $product): bool => $product['barcode'] === 123456
);
print_r($findProduct);
输出:
[
'name' => 'Macbook Pro',
'type' => 'Laptop',
'barcode' => 123456,
]
如果没有匹配项,则返回 null
:
$nonExistentProduct = array_find(
array: $products,
callback: fn(array $product): bool => $product['barcode'] === 'invalid'
);
var_dump($nonExistentProduct); // null
Laravel 等效
在 Laravel 中,可以使用 Arr::first
实现相同功能:
use Illuminate\Support\Arr;
$findProduct = Arr::first($products, fn(array $product) => $product['barcode'] === 123456);
函数 array_find_key
array_find_key
与 array_find
类似,但它返回的是第一个符合条件的元素的键名,而不是值。
示例
$findProductKey = array_find_key(
array: $products,
callback: fn(array $product): bool => $product['barcode'] === 789012
);
echo $findProductKey; // 输出:1
如果没有匹配项,则返回 null
:
$nonExistentKey = array_find_key(
array: $products,
callback: fn(array $product): bool => $product['barcode'] === 'invalid'
);
var_dump($nonExistentKey); // null
Laravel 等效
在 Laravel 中,结合 array_keys
和 Arr::first
可以实现类似功能:
use Illuminate\Support\Arr;
$firstProductKey = Arr::first(array_keys($products), fn(int $key) => $products[$key]['barcode'] === 789012);
函数 array_any
array_any
用于检查数组中是否至少有一个元素满足特定条件,如果有,返回 true
,否则返回 false
。
示例
$anyProductsAreLaptops = array_any(
array: $products,
callback: fn(array $product): bool => $product['type'] === 'Laptop'
);
var_dump($anyProductsAreLaptops); // true
如果没有元素满足条件,则返回 false
:
$anyProductsAreInvalid = array_any(
array: $products,
callback: fn(array $product): bool => $product['type'] === 'Invalid'
);
var_dump($anyProductsAreInvalid); // false
Laravel 等效
在 Laravel 中,可以使用 Collection::contains
方法:
use Illuminate\Support\Collection;
$anyProductsAreLaptops = Collection::make($products)->contains(
fn(array $product) => $product['type'] === 'Laptop'
);
函数 array_all
array_all
与 array_any
类似,但它要求数组中的所有元素都必须满足条件才会返回 true
,否则返回 false
。
示例
$allProductsAreLaptops = array_all(
array: $products,
callback: fn(array $product): bool => $product['type'] === 'Laptop'
);
var_dump($allProductsAreLaptops); // false
Laravel 等效
在 Laravel 中,可以使用 Collection::every
方法:
use Illuminate\Support\Collection;
$allProductsAreLaptops = Collection::make($products)->every(
fn(array $product) => $product['type'] === 'Laptop'
);
结论
本文介绍了 PHP 8.4 中即将发布的便捷数组函数,包括 array_find
、array_find_key
、array_any
和 array_all
。这些新函数可以帮助开发者更方便地操作数组。我们还展示了如何使用 Laravel 的 Arr
和 Collection
类实现类似功能。
通过这些新功能,您可以更加高效地处理数组操作,提升代码可读性和简洁性。