Soalan:
Fungsi warisan seperti array_diff dan array_udiff direka untuk membandingkan tatasusunan nilai skalar. Bagaimanakah kita boleh menentukan perbezaan antara dua tatasusunan objek, di mana kita ingin membandingkan berdasarkan nilai sifat tertentu?
Penyelesaian:
Nasib baik, array_udiff boleh dimanfaatkan untuk menangani keperluan ini. Kami mentakrifkan fungsi perbandingan tersuai yang memfokuskan pada sifat yang diingini, dan kemudian menggunakan tatasusunan_udiff untuk menentukan perbezaan antara dua tatasusunan.
Pertimbangkan tatasusunan contoh berikut:
<code class="php">$array1 = array( (object) ['id' => '205', 'day_id' => '12'], ... ); $array2 = array( (object) ['id' => '205', 'day_id' => '13'], ... );</code>
Matlamat kami ialah untuk mengenal pasti perbezaan antara tatasusunan ini berdasarkan sifat id. Untuk mencapai matlamat ini, kita boleh mencipta fungsi perbandingan:
<code class="php">function compare_objects($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; }</code>
Fungsi ini membandingkan sifat id dua objek dan mengembalikan perbezaan sebagai integer. Kami kemudiannya menggunakan array_udiff seperti berikut:
<code class="php">$diff = array_udiff($array1, $array2, 'compare_objects');</code>
Sebagai alternatif, dengan PHP 5.3 dan ke atas, kami boleh menggunakan fungsi tanpa nama sebagai perbandingan:
<code class="php">$diff = array_udiff($array1, $array2, function ($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } );</code>
Penyelesaian ini mengira perbezaan antara dua dengan berkesan tatasusunan objek dengan membandingkan nilai harta yang ditentukan. Tatasusunan $diff yang terhasil akan mengandungi objek yang mewakili elemen unik sama ada daripada $array1 atau $array2 berdasarkan kriteria perbandingan.
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Perbezaan Antara Tatasusunan Objek dengan Membandingkan Nilai Harta Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!