编程

每个开发者都应该知道的 Laravel 数组 Helper

958 2023-04-12 00:05:00

Laravel 因优雅、简单及表现力而出名。Larvel 最强大的特性之一就是它的helper辅助函数。Laravel 数组的辅助函数是开发者处理数组数据的重要工具。

本文将介绍一些开发者都应该知道的Laravel数组辅助函数。这些辅助函数可以节约开发时间,并使数组的处理更容易管理。包括 join()keyBy()get()first()last()pluck()。让我们一起深入了解这些数组辅助函数吧。

Array Join 数组组合

你可能会想,"我可以使用 join()implode(),为什么还要用这个辅助函数呢?"

use Illuminate\Support\Arr;
 
$stack = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];
 
Arr::join($stack, ', ');
// Tailwind, Alpine, Laravel, Livewire
 
implode($stack, ', ');
// Tailwind, Alpine, Laravel, Livewire

上例效果完全相同。因此,你自己决定你喜欢用哪一种。join() 辅助函数真正方便之处是,如果你最后一个数组值要使用不同的连字符连接:

use Illuminate\Support\Arr;
 
$stack = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];
 
Arr::join($stack, ', ', ', and');
// Tailwind, Alpine, Laravel, and Livewire

Keyed Array data

有时候,你需要处理一个数据数组(比如,多个产品),并使用其中一个产品属性作为数组的键。这样的方式,你可以通过给定的键快速定位目标数据。

你可以像下例这样编写代码,创建一个新的变量并按照该键的值重排数据:

$array = [
    ['product_id' => 'prod-100', 'name' => 'Desk'],
    ['product_id' => 'prod-200', 'name' => 'Chair'],
];
 
$keyed = [];
 
foreach ($array as $value) {
    $keyed[$value['product_id']] = $value;
}
 
/*
    [
        'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
        'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
    ]
*/

使用 Arr::keyBy() 方法,你可以用一行代码实现上述功能:

$keyed = Arr::keyBy($array, 'product_id');

从数组中检查并获取数据

Arr::get() 方法简单且强大,它使用了"点语法",使你更容易用于获取嵌套数据:

use Illuminate\Support\Arr;
 
$data = [
    'products' => [
        'desk' => [
            'name' => 'Oakendesk'
            'price' => 599.00,
            'description' => 'Solid oak desk built from scratch.'
        ],
    ],
];
 
// 599.00
Arr::get($data, 'products.desk.price');
 
// Returns false
Arr::has($data, 'products.desk.discount');
 
// Returns null
Arr::get($data, 'products.desk.discount');
 
// Returns custom default value if not found.
Arr::get($data, 'products.desk.discount', ['type' => 'percent', 'value' => 10]);

在数组中获取第一个或最后一个元素

想获得数组的最后一个元素,你可以在 PHP 中使用 end() 函数:

$array = [100, 200, 300, 110];
 
end($array);

如果数组为空,将会返回 false:

$array = [];
end($array); // false

而使用 Laravel 的 last() 辅助函数,当数组为空时,你有多种选项:

use Illuminate\Support\Arr;
 
$array = [];
 
Arr::last($array); // null
 
// Provide a default
Arr::last($array, null, 100); // 100

使用 Laravel 辅助函数同时也让你可以传入一个闭包作为第二个参数,该闭包可以作为条件去限制哪个元素可以作为第一个或最后一个返回。

$array = [100, 200, 300, 110];
 
Arr::last($array, fn ($e) => $e > 110); // 300
Arr::first($array, fn ($e) => $e > 110); // 200

简单但强大的 API,可以应付多种情况。

从数组中提取数据

有时候你需要获取从数据集合中获取一条数据(比如用户邮箱):

$array = [
    ['user' => ['id' => 1, 'name' => 'User 1', 'email' => 'user1@example.com']],
    ['user' => ['id' => 2, 'name' => 'User 2', 'email' => 'user2@example.com']],
];
 
$emails = [];
 
foreach ($array as $result) {
    $emails[] = $result['user']['email'];
}
 
/*
[
    "user1@example.com",
    "user2@example.com",
]
*/

Laravel 的 Arr::pluck() 使这个操作十分简单:

Arr::pluck($array, 'user.email');