Maison  >  Article  >  développement back-end  >  Nouvelles fonctions de tableau en PHP

Nouvelles fonctions de tableau en PHP

王林
王林original
2024-08-19 18:43:331119parcourir

New Array Functions in PHP

Introduction

PHP 8.4 devrait sortir en novembre 2024 et introduira de nouvelles fonctions de tableau pratiques :

  • array_find
  • array_find_key
  • array_any
  • array_all

Dans cet article, nous allons jeter un coup d'œil rapide à ces nouvelles fonctions et comment vous pourrez les utiliser dans vos projets exécutant PHP 8.4.

Si vous êtes un développeur Laravel, vous remarquerez peut-être que nous avons déjà des fonctions similaires dans les classes IlluminateSupportCollection et IlluminateSupportArr. Mais j'aime le fait que ces fonctions soient natives de PHP et soient donc disponibles dans n'importe quel projet PHP.

Pour tous mes lecteurs développeurs Laravel, je vais vous montrer les équivalents Laravel de ces nouvelles fonctions afin que vous puissiez obtenir les mêmes fonctionnalités dans vos projets Laravel sans avoir à attendre PHP 8.4.

Vous pourriez également être intéressé par mon autre article qui parle de la nouvelle fonctionnalité "property hooks" de PHP 8.4.

La fonction array_find

La fonction array_find renvoie la valeur du premier élément qui correspond aux critères définis dans le rappel. Si aucun élément ne correspond au rappel, la fonction renvoie null.

Jetons un coup d'œil à un exemple simple. Nous imaginerons que nous avons une gamme de produits et que nous voulons trouver le produit avec un code barre de 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;
    },
);

Après avoir exécuté le code ci-dessus, $findProduct sera égal à :

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

Nous pourrions clarifier cela un peu plus en utilisant une fonction flèche comme deuxième argument :

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

Le code ci-dessus renverra le même résultat que l'exemple précédent.

Si aucun élément ne correspond au rappel, la fonction retournera null. Voyons un exemple de ceci :

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

Dans ce cas, $nonExistentProduct sera égal à null.

Équivalent Laravel

Dans Laravel, vous pouvez obtenir un résultat similaire en utilisant la méthode Arr::first :

use Illuminate\Support\Arr;

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

La fonction array_find_key

Cette fonction est similaire à la fonction array_find, mais au lieu de renvoyer la valeur du premier élément qui correspond au rappel, elle renvoie la clé du premier élément qui correspond au rappel.

Prenons notre exemple de tableau $products de plus tôt. Cette fois, nous souhaitons retrouver la clé du produit avec un code barre de 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,
);

Après avoir exécuté le code ci-dessus, $findProduct sera égal à 1 car le produit est le deuxième élément du tableau.

Si aucun élément ne correspond au rappel, la fonction retournera null. Voyons un exemple de ceci :

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

Dans ce cas, $nonExistentProduct sera égal à null.

Équivalent Laravel

Dans Laravel, vous pouvez obtenir un résultat similaire en utilisant une combinaison des méthodes array_keys et Arr::first :

use Illuminate\Support\Arr;

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

Dans le code ci-dessus, nous utilisons d'abord array_keys pour obtenir un tableau des clés du tableau $products. Nous utilisons ensuite Arr::first pour trouver la première clé qui correspond au rappel. C'est un peu plus verbeux que la fonction PHP native, mais elle obtient le même résultat.

La fonction array_any

La fonction array_any permet de vérifier qu'au moins un élément du tableau correspond aux critères définis dans le callback. Si un élément correspond au rappel, la fonction renvoie true. Si aucun élément ne correspond au rappel, la fonction renvoie false.

En nous en tenant à notre exemple de tableau $products, vérifions si l'un des produits a un type d'ordinateur portable :

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

Dans ce cas, $anyProductsAreLaptops sera égal à true car au moins un des produits de la baie est un ordinateur portable.

Si aucun élément ne correspond au rappel, la fonction retournera false. Voyons un exemple de ceci :

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

Dans ce cas, $anyProductsAreInvalid sera égal à false.

Équivalent Laravel

On peut obtenir le même résultat dans Laravel en utilisant la méthode contain sur une collection :

use Illuminate\Support\Collection;

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

Dans le code ci-dessus, nous créons une collection à partir du tableau $products, puis utilisons la méthode contain pour vérifier si l'un des produits de la collection est des ordinateurs portables.

La fonction array_all

La fonction array_all est similaire à la fonction array_any, mais au lieu de vérifier si au moins un élément correspond au rappel, elle vérifie si tous les éléments correspondent au rappel. Si tous les éléments correspondent au rappel, la fonction renvoie true. Si un élément ne correspond pas au rappel, la fonction renvoie false.

Vérifions si tous les produits de notre gamme $products sont des ordinateurs portables :

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

Dans ce cas, $allProductsAreLaptops sera égal à false car tous les produits de la matrice ne sont pas des ordinateurs portables.

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! ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn