«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Новые функции массивов в PHP

Новые функции массивов в PHP

Опубликовано 21 августа 2024 г.
Просматривать:685

New Array Functions in PHP

Введение

Выпуск PHP 8.4 запланирован на ноябрь 2024 г., и в нем появятся несколько удобных новых функций работы с массивами:

  • найти_массив
  • array_find_key
  • array_any
  • array_all

В этой статье мы кратко рассмотрим эти новые функции и то, как вы сможете использовать их в своих проектах под управлением PHP 8.4.

Если вы разработчик Laravel, вы могли заметить, что у нас уже есть похожие функции в классах Illuminate\Support\Collection и Illuminate\Support\Arr. Но мне нравится, что эти функции будут встроенными в PHP и поэтому будут доступны в любом проекте PHP.

Для всех моих читателей, которые являются разработчиками Laravel, я покажу вам эквиваленты этих новых функций в Laravel, чтобы вы могли добиться той же функциональности в своих проектах Laravel, не дожидаясь PHP 8.4.

Возможно, вам также будет интересно прочитать другую мою статью, в которой рассказывается о новой функции «перехватчиков свойств» PHP 8.4.

Функция array_find

Функция array_find возвращает значение первого элемента, соответствующего критериям, определенным в обратном вызове. Если ни один элемент не соответствует обратному вызову, функция возвращает значение null.

Давайте рассмотрим простой пример. Предположим, у нас есть массив продуктов и мы хотим найти продукт по штрих-коду 123456:

$products = [
    [
        'name' => 'Macbook Pro',
        'type' => 'Laptop',
        'barcode' => 123456,
    ],
    [
        'name' => 'Framework Laptop 13',
        'type' => 'Laptop',
        'barcode' => 789012,
    ],
    [
        'name' => 'Samsung Galaxy S24',
        'type' => 'Phone',
        'barcode' => 135791,
    ],
];

// Find the product with barcode 123456
$findProduct = array_find(
    array: $products,
    callback: function (array $product): bool {
        return $product['barcode'] == 123456;
    },
);

После запуска приведенного выше кода $findProduct будет равен:

[
    'name'=> 'Macbook Pro',
    'type' => 'Laptop',
    'barcode' => 123456,
]

Мы могли бы немного упростить ситуацию, используя стрелочную функцию в качестве второго аргумента:

$findProduct = array_find(
    array: $products,
    callback: fn (array $product): bool => $product['barcode'] === 123456,
);

Приведенный выше код вернет тот же результат, что и предыдущий пример.

Если ни один элемент не соответствует обратному вызову, функция вернет значение null. Давайте посмотрим на пример:

$nonExistentProduct = array_find(
    array: $products,
    callback: fn (array $product): bool => $product['barcode'] === 'invalid',
);

В этом случае $nonExistentProduct будет равен нулю.

Эквивалент Ларавел

В Laravel аналогичного результата можно добиться, используя метод Arr::first:

use Illuminate\Support\Arr;

$findProduct = Arr::first(
    $products,
    fn (array $product): bool => $product['barcode'] === 123456,
);

Функция array_find_key

Эта функция аналогична функции array_find, но вместо возврата значения первого элемента, соответствующего обратному вызову, она возвращает ключ первого элемента, соответствующего обратному вызову.

Давайте возьмем наш пример массива $products, приведенный ранее. На этот раз мы хотим найти ключ продукта со штрих-кодом 789012:

$products = [
    [
        'name' => 'Macbook Pro',
        'type' => 'Laptop',
        'barcode' => 123456,
    ],
    [
        'name' => 'Framework Laptop 13',
        'type' => 'Laptop',
        'barcode' => 789012,
    ],
    [
        'name' => 'Samsung Galaxy S24',
        'type' => 'Phone',
        'barcode' => 135791,
    ],
];

// Find the key of the product with barcode 789012
$findProduct = array_find_key(
    array: $products,
    callback: fn (array $product): bool => $product['barcode'] === 789012,
);

После выполнения приведенного выше кода $findProduct будет равен 1, поскольку произведение является вторым элементом массива.

Если ни один элемент не соответствует обратному вызову, функция вернет значение null. Давайте посмотрим на пример:

$nonExistentProduct = array_find_key(
    array: $products,
    callback: fn (array $product): bool => $product['barcode'] === 'invalid',
);

В этом случае $nonExistentProduct будет равен нулю.

Эквивалент Ларавел

В Laravel аналогичного результата можно добиться, используя комбинацию методов array_keys и Arr::first:

use Illuminate\Support\Arr;

$firstProductKey = Arr::first(
    array_keys($products),
    fn (int $key): bool => $products[$key]['barcode'] === 789012,
);

В приведенном выше коде мы сначала используем array_keys для получения массива ключей массива $products. Затем мы используем Arr::first, чтобы найти первый ключ, соответствующий обратному вызову. Это немного более подробно, чем встроенная функция PHP, но дает тот же результат.

Функция array_any

Функция array_any позволяет вам проверить, что хотя бы один элемент массива соответствует критериям, определенным в обратном вызове. Если какой-либо элемент соответствует обратному вызову, функция возвращает true. Если ни один элемент не соответствует обратному вызову, функция возвращает false.

Используя наш пример массива $products, давайте проверим, имеет ли какой-либо из продуктов тип ноутбука:

$anyProductsAreLaptops = array_any(
    array: $products,
    callback: fn (array $product): bool => $product['type'] === 'Laptop',
);

В этом случае $anyProductsAreLaptops будет равна true, поскольку хотя бы один из продуктов в массиве — ноутбук.

Если ни один элемент не соответствует обратному вызову, функция вернет false. Давайте посмотрим на пример:

$anyProductsAreInvalid = array_any(
    array: $products,
    callback: fn (array $product): bool => $product['type'] === 'Invalid',
);

В этом случае $anyProductsAreInvalid будет иметь значение false.

Эквивалент Ларавел

Мы можем добиться того же результата в Laravel, используя метод contains для коллекции:

use Illuminate\Support\Collection;

$anyProductsAreLaptops = Collection::make($products)->contains(
    fn (array $product): bool => $product['type'] === 'Laptop',
);

В приведенном выше коде мы создаем коллекцию из массива $products, а затем с помощью метода contains проверяем, являются ли какие-либо продукты в коллекции ноутбуками.

Функция array_all

Функция array_all аналогична функции array_any, но вместо проверки того, соответствует ли хотя бы один элемент обратному вызову, она проверяет, соответствуют ли все элементы обратному вызову. Если все элементы соответствуют обратному вызову, функция возвращает true. Если какой-либо элемент не соответствует обратному вызову, функция возвращает false.

Давайте проверим, все ли продукты в нашем массиве $products являются ноутбуками:

$allProductsAreLaptops = array_all(
    array: $products,
    callback: fn (array $product): bool => $product['type'] === 'Laptop',
);

В этом случае $allProductsAreLaptops будет иметь значение false, поскольку не все продукты в массиве являются ноутбуками.

Эквивалент Ларавел

В Laravel мы можем добиться того же результата, используя каждый метод в коллекции:

use Illuminate\Support\Collection;

$allProductsAreLaptops = Collection::make($products)->every(
    fn (array $product): bool => $product['type'] === 'Laptop',
);

В приведенном выше коде мы создаем коллекцию из массива $products, а затем с помощью каждого метода проверяем, все ли продукты в коллекции являются ноутбуками.

Заключение

Надеюсь, эта статья показала вам, как можно использовать новые функции работы с массивами, которые будут доступны в PHP 8.4. Это также должно было дать вам представление о том, как можно добиться аналогичной функциональности в Laravel, используя классы Illuminate\Support\Collection и Illuminate\Support\Arr.

Если вам понравилось читать этот пост, возможно, вам будет интересно ознакомиться с моей 220-страничной электронной книгой «Battle Ready Laravel», в которой подобные темы рассматриваются более подробно.

Или вы можете ознакомиться с моей другой 440-страничной электронной книгой «Использование API в Laravel», в которой вы узнаете, как использовать Laravel для использования API из других сервисов.

Если вы хотите получать обновления каждый раз, когда я публикую новую публикацию, подпишитесь на мою рассылку.

Продолжайте создавать потрясающие вещи! ?

Заявление о выпуске Эта статья воспроизводится по адресу: https://dev.to/ashallendesign/new-array-funtions-in-php-84-nbl?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3