PHP 中的新数组函数

王林
发布: 2024-08-19 18:43:33
原创
930 人浏览过

New Array Functions in PHP

pengenalan

PHP 8.4 ditetapkan untuk dikeluarkan pada November 2024 dan akan memperkenalkan beberapa fungsi tatasusunan baharu yang berguna:

  • array_find
  • jari_cari_kunci
  • array_any
  • array_all

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 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 juga mungkin berminat untuk menyemak artikel saya yang lain yang membincangkan semua tentang ciri "cangkuk harta" baharu PHP 8.4.

Fungsi array_find

Fungsi array_find mengembalikan nilai elemen pertama yang sepadan dengan kriteria yang ditakrifkan dalam panggilan balik. Jika tiada unsur yang sepadan dengan panggilan balik, fungsi itu 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. Jom lihat contoh ini:

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

Dalam kes ini, $nonExistentProduct akan sama dengan null.

Setaraf Laravel

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 array_find_key

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 contoh tatasusunan $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. Jom 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.

Setaraf Laravel

Dalam Laravel, anda boleh mencapai hasil yang sama 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

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 elemen 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 Laptop:

$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. Jom lihat contoh ini:

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

Dalam kes ini, $anyProductsAreInvalid akan sama dengan palsu.

Setaraf Laravel

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 adalah komputer riba.

Fungsi array_all

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 itu akan 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 tidak semua produk dalam tatasusunan adalah komputer riba.

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!