Algoritma penggabungan tatasusunan PHP dan penyahduplikasi: peraturan tersuai berdasarkan penutupan

WBOY
Lepaskan: 2024-04-20 12:12:02
asal
725 orang telah melayarinya

Tentukan peraturan perbandingan tersuai melalui penutupan untuk menggabungkan dan menyahduplikasi tatasusunan menerima dua elemen dan mengembalikan nilai Boolean untuk menunjukkan unsur yang sama akan dibuang. Dengan merentasi tatasusunan dan menggunakan penutupan untuk menyahduplikasi, penggabungan tatasusunan dan penyahduplikasian dengan peraturan tersuai akhirnya dilaksanakan.

PHP 数组合并去重算法:基于闭包的自定义规则

Algoritma penggabungan tatasusunan dan penyahduplikasi PHP: peraturan tersuai berdasarkan penutupan

Dalam pembangunan PHP, kita selalunya perlu menggabungkan tatasusunan dan menyahduplikasinya. Walau bagaimanapun, fungsi lalaiarray_merge()tidak dapat memenuhi semua senario, terutamanya apabila elemen yang digabungkan perlu dinyahduplikasi mengikut peraturan tersuai. Artikel ini akan memperkenalkan algoritma berasaskan penutupan untuk melaksanakan operasi penggabungan tatasusunan dan penyahduplikasian dengan peraturan tersuai.array_merge()函数并不能满足所有场景,尤其是当合并的元素需要根据自定义规则去重时。本文将介绍一种基于闭包的算法,实现自定义规则的数组合并去重操作。

算法原理

该算法通过使用闭包作为比较函数,实现自定义的去重规则。闭包接收两个元素作为参数,并返回一个布尔值,表示两个元素是否相等。如果两个元素被闭包判定为相等,则只保留其中一个。

代码实现

function array_merge_distinct(array $arr1, array $arr2, callable $compare_func) { $result = []; foreach ($arr1 as $key => $value) { $found = false; foreach ($arr2 as $key2 => $value2) { if ($compare_func($value, $value2)) { $found = true; break; } } if (!$found) { $result[$key] = $value; } } return array_merge($result, $arr2); }
Salin selepas log masuk

实战案例

假设我们有两个数组:

$arr1 = ['a', 'b', 'c']; $arr2 = ['b', 'd', 'e'];
Salin selepas log masuk

我们要根据以下规则合并并去重数组:

  • 如果两个元素相等(严格模式),则只保留一个。

我们可以使用闭包实现这个比较规则:

$compare_func = function ($value1, $value2) { return $value1 === $value2; };
Salin selepas log masuk

然后,将闭包作为参数传递给array_merge_distinct()

Prinsip algoritma

Algoritma ini melaksanakan peraturan penduaan tersuai dengan menggunakan penutupan sebagai fungsi perbandingan. Penutupan menerima dua elemen sebagai parameter dan mengembalikan nilai Boolean yang menunjukkan sama ada kedua-dua elemen adalah sama. Jika dua elemen dinilai sama dengan penutupan, hanya satu daripadanya dikekalkan.

Pelaksanaan kod

$merged = array_merge_distinct($arr1, $arr2, $compare_func);
Salin selepas log masuk

Kes praktikalAndaikan kita mempunyai dua tatasusunan:
echo print_r($merged, true);
Salin selepas log masuk
Kami ingin menggabungkan dan menyahganda tatasusunan mengikut peraturan berikut:
Kita boleh melaksanakan peraturan perbandingan ini menggunakan penutupan:
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )
Salin selepas log masuk
Kemudian, hantar penutupan sebagai parameter kepada fungsi array_merge_distinct(): rrreee Output tatasusunan yang digabungkan untuk: rrreee: rrreeeSambunganAlgoritma boleh dilanjutkan mengikut keperluan untuk menyokong peraturan perbandingan yang lebih kompleks atau tingkah laku tersuai. Sebagai contoh, kita boleh membandingkan berdasarkan sifat objek, atau mengalih keluar pendua berdasarkan nilai cincang unsur, dsb.

Atas ialah kandungan terperinci Algoritma penggabungan tatasusunan PHP dan penyahduplikasi: peraturan tersuai berdasarkan penutupan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
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!