PHP の新しい配列関数

王林
リリース: 2024-08-19 18:43:33
オリジナル
1150 人が閲覧しました

New Array Functions in PHP

導入

PHP 8.4 は 2024 年 11 月にリリースされる予定で、いくつかの便利な新しい配列関数が導入されます。

  • 配列検索
  • 配列検索キー
  • 配列_任意
  • 配列すべて

この記事では、これらの新しい関数と、PHP 8.4 を実行しているプロジェクトでそれらの関数を使用する方法について簡単に説明します。

あなたが Laravel 開発者であれば、IlluminateSupportCollection クラスと IlluminateSupportArr クラスに同様の関数がすでに存在していることに気づくかもしれません。しかし、これらの関数が PHP にネイティブであるため、どの PHP プロジェクトでも利用できることが気に入っています。

Laravel 開発者である私の読者のために、PHP 8.4 を待たずに Laravel プロジェクトで同じ機能を実現できるように、これらの新しい関数に相当する Laravel を示します。

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,
]
ログイン後にコピー

2 番目の引数としてアロー関数を使用することで、これをもう少し整理できます。

$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 は null になります。

Laravel の同等物

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,
);
ログイン後にコピー

上記のコードを実行すると、product が配列の 2 番目の要素であるため、$findProduct は 1 になります。

コールバックに一致する要素がない場合、関数は null を返します。この例を見てみましょう:

$nonExistentProduct = array_find_key(
    array: $products,
    callback: fn (array $product): bool => $product['barcode'] === 'invalid',
);
ログイン後にコピー

この場合、$nonExistentProduct は null と等しくなります。

Laravel の同等物

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 関数を使用すると、配列内の少なくとも 1 つの要素がコールバックで定義された基準に一致するかどうかを確認できます。いずれかの要素がコールバックに一致する場合、関数は true を返します。コールバックに一致する要素がない場合、関数は false を返します。

$products 配列の例をそのまま使用して、製品のタイプが Laptop であるかどうかを確認してみましょう。

$anyProductsAreLaptops = array_any(
    array: $products,
    callback: fn (array $product): bool => $product['type'] === 'Laptop',
);
ログイン後にコピー

この場合、配列内の製品の少なくとも 1 つはラップトップであるため、$anyProductsAreLaptops は true と等しくなります。

コールバックに一致する要素がない場合、関数は false を返します。この例を見てみましょう:

$anyProductsAreInvalid = array_any(
    array: $products,
    callback: fn (array $product): bool => $product['type'] === 'Invalid',
);
ログイン後にコピー

この場合、$anyProductsAreInvalid は false になります。

Laravel の同等物

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 関数に似ていますが、少なくとも 1 つの要素がコールバックに一致するかどうかをチェックするのではなく、すべての要素がコールバックに一致するかどうかをチェックします。すべての要素がコールバックに一致する場合、関数は true を返します。いずれかの要素がコールバックと一致しない場合、関数は false を返します。

$products 配列内のすべての製品がラップトップであるかどうかを確認してみましょう:

$allProductsAreLaptops = array_all(
    array: $products,
    callback: fn (array $product): bool => $product['type'] === 'Laptop',
);
ログイン後にコピー

この場合、配列内のすべての製品がラップトップであるわけではないため、$allProductsAreLaptops は false になります。

Laravel Equivalent

In Laravel, we can achieve the same result using the every method on a collection:

use Illuminate\Support\Collection;

$allProductsAreLaptops = Collection::make($products)->every(
    fn (array $product): bool => $product['type'] === 'Laptop',
);
ログイン後にコピー

In the code above, we're creating a collection from the $products array and then using the every method to check if all the products in the collection are laptops.

Conclusion

Hopefully, this article has shown you how you can use the new array functions that will be available in PHP 8.4. It should have also given you an idea of how you can achieve similar functionality in Laravel using the Illuminate\Support\Collection and Illuminate\Support\Arr classes.

If you enjoyed reading this post, you might be interested in checking out my 220+ page ebook "Battle Ready Laravel" which covers similar topics in more depth.

Or, you might want to check out my other 440+ page ebook "Consuming APIs in Laravel" which teaches you how to use Laravel to consume APIs from other services.

If you're interested in getting updated each time I publish a new post, feel free to sign up for my newsletter.

Keep on building awesome stuff! ?

以上がPHP の新しい配列関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート