Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menapis Baris Tatasusunan dengan Memadankan Nilai daripada Tatasusunan Rata?

Bagaimana untuk Menapis Baris Tatasusunan dengan Memadankan Nilai daripada Tatasusunan Rata?

Barbara Streisand
Barbara Streisandasal
2024-10-23 16:41:02305semak imbas

How to Filter Array Rows by Matching Values from a Flat Array?

Mencari Nilai Padanan Baris Tatasusunan dalam Tatasusunan Rata

Dalam senario ini, anda mempunyai tatasusunan, $arr1, dengan berbilang lajur dan tatasusunan kedua, $arr2, mengandungi set nilai ID. Objektifnya adalah untuk menapis $arr1 dan mengembalikan hanya baris yang mengandungi nilai ID yang terdapat dalam $arr2.

Penyelesaian yang cekap untuk masalah ini terletak pada penggunaan fungsi array_uintersect(), yang melaksanakan persilangan tersusun dua tatasusunan menggunakan fungsi panggil balik tersuai. Fungsi ini beroperasi pada pasangan elemen daripada kedua-dua tatasusunan input dan pulangan -1, 0 atau 1, berdasarkan hasil perbandingan.

Panggil Balik Tersuai:

Tersuai fungsi panggil balik yang kami takrifkan dalam array_uintersect() membandingkan lajur ID daripada $arr1 (jika ada) atau keseluruhan elemen itu sendiri jika lajur tidak ditakrifkan, dengan nilai daripada $arr2.

<code class="php">fn($a, $b) => ($a['id'] ?? $a) <=> ($b['id'] ?? $b)</code>

Menggunakan ternary operator, kami menetapkan $a['id'] kepada $a jika lajur itu wujud, dan $a sendiri sebaliknya. Begitu juga, kita melakukan perkara yang sama untuk $b. Ini membolehkan kami mengendalikan kes di mana lajur ID mungkin tidak terdapat dalam semua baris.

Isih dan Kecekapan:

Array_uintersect() menggunakan pengisihan untuk membandingkan elemen dengan cekap. Secara lalai, ia menyusun kedua-dua tatasusunan input secara berangka. Memandangkan kami sedang membandingkan nilai ID, yang berkemungkinan angka dalam kes anda, pengisihan ini meningkatkan masa pelaksanaan.

Contoh Penggunaan:

Untuk menunjukkan cara penyelesaian ini berfungsi, kita boleh menggunakannya pada tatasusunan yang disediakan:

<code class="php">$arr1 = [
    ['key' => 0, 'id' => 14, 'name' => 'bob', 'style' => 'big', 'age' => 33, 'whim' => 'no'],
    // ... (other rows from $arr1)
];

$arr2 = [14, 72, 8790];

$resultingArray = array_uintersect($arr1, $arr2, $customCallback);</code>

$resultingArray akan mengandungi baris dari $arr1 di mana nilai ID sepadan dengan nilai dalam $arr2.

Atas ialah kandungan terperinci Bagaimana untuk Menapis Baris Tatasusunan dengan Memadankan Nilai daripada Tatasusunan Rata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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