Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Algoritma penggabungan tatasusunan PHP dan penyahduplikasi: peraturan tersuai berdasarkan penutupan

Algoritma penggabungan tatasusunan PHP dan penyahduplikasi: peraturan tersuai berdasarkan penutupan

WBOY
WBOYasal
2024-04-20 12:12:02789semak imbas

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 lalai array_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);
}

实战案例

假设我们有两个数组:

$arr1 = ['a', 'b', 'c'];
$arr2 = ['b', 'd', 'e'];

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

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

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

$compare_func = function ($value1, $value2) {
    return $value1 === $value2;
};

然后,将闭包作为参数传递给 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);

🎜Kes praktikal🎜🎜🎜Andaikan kita mempunyai dua tatasusunan:🎜
echo print_r($merged, true);
🎜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
)
🎜 Kemudian, hantar penutupan sebagai parameter kepada fungsi array_merge_distinct(): 🎜rrreee🎜 Output tatasusunan yang digabungkan untuk: 🎜rrreee🎜: 🎜rrreee🎜🎜Sambungan🎜🎜🎜Algoritma 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!

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