PHP 8.4 soll im November 2024 veröffentlicht werden und einige praktische neue Array-Funktionen einführen:
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 Illuminate\Support\Collection und Illuminate\Support\Arr 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 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.
Sehen 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 dies etwas weiter bereinigen, 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.
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, );
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.
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.
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.
Wir können das gleiche Ergebnis 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 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.
In Laravel können wir das gleiche Ergebnis erzielen, indem wir die Methode every für eine Sammlung verwenden:
use Illuminate\Support\Collection; $allProductsAreLaptops = Collection::make($products)->every( fn (array $product): bool => $product['type'] === 'Laptop', );
Im obigen Code erstellen wir eine Sammlung aus dem Array $products und verwenden dann die Methode every, um zu prüfen, ob alle Produkte in der Sammlung Laptops sind.
Hoffentlich hat Ihnen dieser Artikel gezeigt, wie Sie die neuen Array-Funktionen nutzen können, die in PHP 8.4 verfügbar sein werden. Es hätte Ihnen auch eine Vorstellung davon geben sollen, wie Sie mit den Klassen Illuminate\Support\Collection und Illuminate\Support\Arr ähnliche Funktionen in Laravel erreichen können.
Wenn Ihnen die Lektüre dieses Beitrags gefallen hat, könnte es Sie interessieren, sich mein 220-seitiges E-Book „Battle Ready Laravel“ anzusehen, das ähnliche Themen ausführlicher behandelt.
Vielleicht möchten Sie sich auch mein anderes 440-seitiges E-Book „Consuming APIs in Laravel“ ansehen, in dem Sie erfahren, wie Sie mit Laravel APIs von anderen Diensten nutzen.
Wenn Sie jedes Mal, wenn ich einen neuen Beitrag veröffentliche, auf dem Laufenden bleiben möchten, können Sie sich gerne für meinen Newsletter anmelden.
Bauen Sie weiterhin tolle Sachen! ?
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3