PHP 8.4 ditetapkan untuk dikeluarkan pada November 2024 dan akan memperkenalkan beberapa fungsi tatasusunan baharu yang berguna:
Dalam artikel ini, kami akan melihat dengan pantas fungsi baharu ini dan cara anda boleh menggunakannya dalam projek anda yang menjalankan PHP 8.4.
Jika anda seorang pembangun Laravel, anda mungkin perasan bahawa kami sudah mempunyai fungsi yang serupa dalam kelas IlluminateSupportCollection dan IlluminateSupportArr. Tetapi saya suka bahawa fungsi ini adalah asli kepada PHP dan oleh itu akan tersedia dalam mana-mana projek PHP.
Untuk mana-mana pembaca saya yang merupakan pembangun Laravel, saya akan menunjukkan kepada anda persamaan Laravel bagi fungsi baharu ini supaya anda boleh mencapai fungsi yang sama dalam projek Laravel anda tanpa perlu menunggu PHP 8.4.
Anda mungkin juga berminat untuk menyemak artikel saya yang lain yang membincangkan semua tentang ciri "cangkuk harta" baharu PHP 8.4.
Fungsi array_find mengembalikan nilai elemen pertama yang sepadan dengan kriteria yang ditakrifkan dalam panggilan balik. Jika tiada elemen yang sepadan dengan panggil balik, fungsi mengembalikan null.
Mari kita lihat contoh mudah. Kami akan bayangkan kami mempunyai pelbagai produk dan kami ingin mencari produk dengan kod bar 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; }, );
Selepas menjalankan kod di atas, $findProduct akan sama dengan:
[ 'name'=> 'Macbook Pro', 'type' => 'Laptop', 'barcode' => 123456, ]
Kita boleh membersihkannya sedikit lagi dengan menggunakan fungsi anak panah sebagai hujah kedua:
$findProduct = array_find( array: $products, callback: fn (array $product): bool => $product['barcode'] === 123456, );
Kod di atas akan mengembalikan hasil yang sama seperti contoh sebelumnya.
Jika tiada elemen yang sepadan dengan panggilan balik, fungsi akan mengembalikan null. Mari lihat contoh ini:
$nonExistentProduct = array_find( array: $products, callback: fn (array $product): bool => $product['barcode'] === 'invalid', );
Dalam kes ini, $nonExistentProduct akan sama dengan null.
Dalam Laravel, anda boleh mencapai hasil yang serupa menggunakan kaedah Arr::first:
use Illuminate\Support\Arr; $findProduct = Arr::first( $products, fn (array $product): bool => $product['barcode'] === 123456, );
Fungsi ini serupa dengan fungsi array_find, tetapi bukannya mengembalikan nilai elemen pertama yang sepadan dengan panggilan balik, ia mengembalikan kunci elemen pertama yang sepadan dengan panggilan balik.
Mari kita ambil tatasusunan contoh $products kami dari awal. Kali ini, kami ingin mencari kunci produk dengan kod bar 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, );
Selepas menjalankan kod di atas, $findProduct akan sama dengan 1 kerana produk ialah elemen kedua dalam tatasusunan.
Jika tiada elemen yang sepadan dengan panggilan balik, fungsi akan mengembalikan null. Mari lihat contoh ini:
$nonExistentProduct = array_find_key( array: $products, callback: fn (array $product): bool => $product['barcode'] === 'invalid', );
Dalam kes ini, $nonExistentProduct akan sama dengan null.
Dalam Laravel, anda boleh mencapai hasil yang serupa menggunakan gabungan array_keys dan Arr::first kaedah:
use Illuminate\Support\Arr; $firstProductKey = Arr::first( array_keys($products), fn (int $key): bool => $products[$key]['barcode'] === 789012, );
Dalam kod di atas, kami mula-mula menggunakan array_keys untuk mendapatkan tatasusunan kunci tatasusunan $products. Kami kemudian menggunakan Arr::first untuk mencari kunci pertama yang sepadan dengan panggilan balik. Ini lebih bertele-tele sedikit daripada fungsi PHP asli, tetapi ia mencapai hasil yang sama.
Fungsi array_any membolehkan anda menyemak bahawa sekurang-kurangnya satu elemen dalam tatasusunan sepadan dengan kriteria yang ditakrifkan dalam panggilan balik. Jika mana-mana elemen sepadan dengan panggilan balik, fungsi itu kembali benar. Jika tiada unsur yang sepadan dengan panggilan balik, fungsi itu akan mengembalikan palsu.
Berpegang pada tatasusunan contoh $products kami, mari semak sama ada mana-mana produk mempunyai jenis Komputer Riba:
$anyProductsAreLaptops = array_any( array: $products, callback: fn (array $product): bool => $product['type'] === 'Laptop', );
Dalam kes ini, $anyProductsAreLaptops akan sama dengan benar kerana sekurang-kurangnya satu daripada produk dalam tatasusunan ialah komputer riba.
Jika tiada unsur yang sepadan dengan panggilan balik, fungsi akan mengembalikan palsu. Mari lihat contoh ini:
$anyProductsAreInvalid = array_any( array: $products, callback: fn (array $product): bool => $product['type'] === 'Invalid', );
Dalam kes ini, $anyProductsAreInvalid akan sama dengan palsu.
Kita boleh mencapai hasil yang sama dalam Laravel menggunakan kaedah mengandungi pada koleksi:
use Illuminate\Support\Collection; $anyProductsAreLaptops = Collection::make($products)->contains( fn (array $product): bool => $product['type'] === 'Laptop', );
Dalam kod di atas, kami sedang mencipta koleksi daripada tatasusunan $products dan kemudian menggunakan kaedah contains untuk menyemak sama ada mana-mana produk dalam koleksi itu ialah komputer riba.
Fungsi array_all adalah serupa dengan fungsi array_any, tetapi bukannya menyemak sama ada sekurang-kurangnya satu elemen sepadan dengan panggilan balik, ia menyemak sama ada semua elemen sepadan dengan panggilan balik. Jika semua elemen sepadan dengan panggilan balik, fungsi mengembalikan benar. Jika mana-mana elemen tidak sepadan dengan panggilan balik, fungsi mengembalikan palsu.
Mari kita semak sama ada semua produk dalam susunan $products kami adalah komputer riba:
$allProductsAreLaptops = array_all( array: $products, callback: fn (array $product): bool => $product['type'] === 'Laptop', );
Dalam kes ini, $allProductsAreLaptops akan sama dengan palsu kerana bukan semua produk dalam tatasusunan adalah komputer riba.
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.
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! ?
Atas ialah kandungan terperinci Fungsi Tatasusunan Baharu dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!