Heim >Backend-Entwicklung >PHP-Tutorial >Neue Array-Funktionen in PHP

Neue Array-Funktionen in PHP

王林
王林Original
2024-08-19 18:43:331155Durchsuche

New Array Functions in PHP

Einführung

PHP 8.4 soll im November 2024 veröffentlicht werden und einige praktische neue Array-Funktionen einführen:

  • array_find
  • array_find_key
  • array_any
  • array_all

In diesem Artikel werfen wir einen kurzen Blick auf diese neuen Funktionen und wie Sie sie in Ihren Projekten mit PHP 8.4 verwenden können.

Wenn Sie ein Laravel-Entwickler sind, werden Sie vielleicht bemerken, dass wir bereits ähnliche Funktionen in den Klassen IlluminateSupportCollection und IlluminateSupportArr haben. Aber ich finde es toll, dass diese Funktionen in PHP integriert sind und daher in jedem PHP-Projekt verfügbar sind.

Für alle meine Leser, die Laravel-Entwickler sind, zeige ich die Laravel-Äquivalente dieser neuen Funktionen, damit Sie die gleiche Funktionalität in Ihren Laravel-Projekten erreichen können, ohne auf PHP 8.4 warten zu müssen.

Es könnte Sie auch interessieren, meinen anderen Artikel zu lesen, in dem es um die neue „Property Hooks“-Funktion von PHP 8.4 geht.

Die array_find-Funktion

Die Funktion array_find gibt den Wert des ersten Elements zurück, das den im Rückruf definierten Kriterien entspricht. Wenn kein Element mit dem Rückruf übereinstimmt, gibt die Funktion null zurück.

Schauen wir uns ein einfaches Beispiel an. Wir stellen uns vor, wir haben eine Reihe von Produkten und möchten das Produkt mit dem Barcode 123456:
finden

$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;
    },
);

Nachdem der obige Code ausgeführt wurde, ist $findProduct gleich:

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

Wir könnten das etwas weiter aufräumen, indem wir eine Pfeilfunktion als zweites Argument verwenden:

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

Der obige Code gibt das gleiche Ergebnis wie das vorherige Beispiel zurück.

Wenn kein Element mit dem Rückruf übereinstimmt, gibt die Funktion null zurück. Sehen wir uns ein Beispiel dafür an:

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

In diesem Fall ist $nonExistentProduct gleich null.

Laravel-Äquivalent

In Laravel können Sie mit der Arr::first-Methode:
ein ähnliches Ergebnis erzielen

use Illuminate\Support\Arr;

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

Die array_find_key-Funktion

Diese Funktion ähnelt der Funktion array_find, gibt jedoch nicht den Wert des ersten Elements zurück, das mit dem Rückruf übereinstimmt, sondern den Schlüssel des ersten Elements, das mit dem Rückruf übereinstimmt.

Nehmen wir unser $products-Beispielarray von früher. Dieses Mal möchten wir den Schlüssel des Produkts mit dem Barcode 789012 finden:

$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,
);

Nachdem der obige Code ausgeführt wurde, ist $findProduct gleich 1, da das Produkt das zweite Element im Array ist.

Wenn kein Element mit dem Rückruf übereinstimmt, gibt die Funktion null zurück. Sehen wir uns ein Beispiel dafür an:

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

In diesem Fall ist $nonExistentProduct gleich null.

Laravel-Äquivalent

In Laravel können Sie ein ähnliches Ergebnis erzielen, indem Sie eine Kombination der Methoden array_keys und Arr::first verwenden:

use Illuminate\Support\Arr;

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

Im obigen Code verwenden wir zunächst array_keys, um ein Array der Schlüssel des $products-Arrays abzurufen. Anschließend verwenden wir Arr::first, um den ersten Schlüssel zu finden, der zum Rückruf passt. Dies ist etwas ausführlicher als die native PHP-Funktion, erzielt aber das gleiche Ergebnis.

Die array_any-Funktion

Mit der Funktion array_any können Sie überprüfen, ob mindestens ein Element im Array den im Rückruf definierten Kriterien entspricht. Wenn ein Element mit dem Rückruf übereinstimmt, gibt die Funktion „true“ zurück. Wenn kein Element mit dem Rückruf übereinstimmt, gibt die Funktion false zurück.

Bleiben wir bei unserem $products-Beispielarray und prüfen wir, ob eines der Produkte einen Laptop-Typ hat:

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

In diesem Fall ist $anyProductsAreLaptops gleich „true“, da mindestens eines der Produkte im Array ein Laptop ist.

Wenn kein Element mit dem Rückruf übereinstimmt, gibt die Funktion „false“ zurück. Sehen wir uns ein Beispiel dafür an:

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

In diesem Fall ist $anyProductsAreInvalid gleich false.

Laravel-Äquivalent

Das gleiche Ergebnis können wir in Laravel erzielen, indem wir die Methode „contains“ für eine Sammlung verwenden:

use Illuminate\Support\Collection;

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

Im obigen Code erstellen wir eine Sammlung aus dem $products-Array und verwenden dann die Methode „contains“, um zu prüfen, ob es sich bei einem der Produkte in der Sammlung um Laptops handelt.

Die array_all-Funktion

Die Funktion array_all ähnelt der Funktion array_any, prüft jedoch nicht, ob mindestens ein Element mit dem Rückruf übereinstimmt, sondern ob alle Elemente mit dem Rückruf übereinstimmen. Wenn alle Elemente mit dem Callback übereinstimmen, gibt die Funktion true zurück. Wenn ein Element nicht mit dem Rückruf übereinstimmt, gibt die Funktion „false“ zurück.

Überprüfen wir, ob alle Produkte in unserem $products-Array Laptops sind:

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

In diesem Fall ist $allProductsAreLaptops gleich false, da nicht alle Produkte im Array Laptops sind.

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

Das obige ist der detaillierte Inhalt vonNeue Array-Funktionen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn