Fungsi Tatasusunan Baharu dalam PHP

王林
Lepaskan: 2024-08-19 18:43:33
asal
1123 orang telah melayarinya

New Array Functions in PHP

pengenalan

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

  • tatasusunan_cari
  • kunci_cari_tatasusunan
  • susun_sebarang
  • tatasusunan_semua

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

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;
    },
);
Salin selepas log masuk

Selepas menjalankan kod di atas, $findProduct akan sama dengan:

[
    'name'=> 'Macbook Pro',
    'type' => 'Laptop',
    'barcode' => 123456,
]
Salin selepas log masuk

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,
);
Salin selepas log masuk

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',
);
Salin selepas log masuk

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,
);
Salin selepas log masuk

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 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,
);
Salin selepas log masuk

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',
);
Salin selepas log masuk

Dalam kes ini, $nonExistentProduct akan sama dengan null.

Setaraf Laravel

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,
);
Salin selepas log masuk

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 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',
);
Salin selepas log masuk

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',
);
Salin selepas log masuk

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',
);
Salin selepas log masuk

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

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',
);
Salin selepas log masuk

Dalam kes ini, $allProductsAreLaptops akan sama dengan palsu kerana bukan 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',
);
Salin selepas log masuk

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

Atas ialah kandungan terperinci Fungsi Tatasusunan Baharu dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!