综合 PHP 8.4 中的新数组函数

2024-11-19 08:33:52 +0800 CST views 852

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_keyarray_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_keysArr::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_allarray_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_findarray_find_keyarray_anyarray_all。这些新函数可以帮助开发者更方便地操作数组。我们还展示了如何使用 Laravel 的 ArrCollection 类实现类似功能。

通过这些新功能,您可以更加高效地处理数组操作,提升代码可读性和简洁性。

images

复制全文 生成海报 PHP 编程 开发

推荐文章

对多个数组或多维数组进行排序
2024-11-17 05:10:28 +0800 CST
File 和 Blob 的区别
2024-11-18 23:11:46 +0800 CST
mysql关于在使用中的解决方法
2024-11-18 10:18:16 +0800 CST
Python 微软邮箱 OAuth2 认证 Demo
2024-11-20 15:42:09 +0800 CST
使用Python提取图片中的GPS信息
2024-11-18 13:46:22 +0800 CST
动态渐变背景
2024-11-19 01:49:50 +0800 CST
Vue3中的JSX有什么不同?
2024-11-18 16:18:49 +0800 CST
Vue3中的Slots有哪些变化?
2024-11-18 16:34:49 +0800 CST
imap_open绕过exec禁用的脚本
2024-11-17 05:01:58 +0800 CST
Elasticsearch 文档操作
2024-11-18 12:36:01 +0800 CST
JavaScript中设置器和获取器
2024-11-17 19:54:27 +0800 CST
详解 Nginx 的 `sub_filter` 指令
2024-11-19 02:09:49 +0800 CST
Go 接口:从入门到精通
2024-11-18 07:10:00 +0800 CST
Golang Select 的使用及基本实现
2024-11-18 13:48:21 +0800 CST
一键压缩图片代码
2024-11-19 00:41:25 +0800 CST
php客服服务管理系统
2024-11-19 06:48:35 +0800 CST
liunx服务器监控workerman进程守护
2024-11-18 13:28:44 +0800 CST
一个收银台的HTML
2025-01-17 16:15:32 +0800 CST
免费常用API接口分享
2024-11-19 09:25:07 +0800 CST
Rust 高性能 XML 读写库
2024-11-19 07:50:32 +0800 CST
前端如何一次性渲染十万条数据?
2024-11-19 05:08:27 +0800 CST
程序员茄子在线接单