Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Array-Zusammenführungs- und Deduplizierungsalgorithmus: Benutzerdefinierte Regeln basierend auf Schließungen

PHP-Array-Zusammenführungs- und Deduplizierungsalgorithmus: Benutzerdefinierte Regeln basierend auf Schließungen

WBOY
WBOYOriginal
2024-04-20 12:12:02809Durchsuche

Definieren Sie benutzerdefinierte Vergleichsregeln durch Abschlüsse, um Arrays zusammenzuführen und zu deduplizieren. Abschlüsse akzeptieren zwei Elemente und geben einen booleschen Wert zurück, um anzugeben, dass gleiche Elemente verworfen werden. Durch das Durchlaufen des Arrays und die Verwendung von Abschlüssen zur Deduplizierung werden schließlich Array-Zusammenführung und Deduplizierung mit benutzerdefinierten Regeln implementiert.

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

Algorithmus zum Zusammenführen und Deduplizieren von PHP-Arrays: Benutzerdefinierte Regeln basierend auf Schließungen

In der PHP-Entwicklung müssen wir häufig Arrays zusammenführen und deduplizieren. Allerdings kann die Standardfunktion array_merge() nicht alle Szenarien erfüllen, insbesondere wenn die zusammengeführten Elemente gemäß benutzerdefinierten Regeln dedupliziert werden müssen. In diesem Artikel wird ein auf Schließungen basierender Algorithmus zum Implementieren von Array-Zusammenführungs- und Deduplizierungsvorgängen mit benutzerdefinierten Regeln vorgestellt. 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()

Algorithmusprinzip

Dieser Algorithmus implementiert benutzerdefinierte Deduplizierungsregeln, indem er Abschlüsse als Vergleichsfunktionen verwendet. Der Abschluss empfängt zwei Elemente als Parameter und gibt einen booleschen Wert zurück, der angibt, ob die beiden Elemente gleich sind. Wenn zwei Elemente durch den Abschluss als gleich beurteilt werden, bleibt nur eines davon erhalten.

Code-Implementierung

$merged = array_merge_distinct($arr1, $arr2, $compare_func);

🎜Praktischer Fall🎜🎜🎜Angenommen, wir haben zwei Arrays:🎜
echo print_r($merged, true);
🎜Wir möchten die Arrays gemäß den folgenden Regeln zusammenführen und deduplizieren:🎜
  • Wenn die beiden Elemente sind gleich (streng Modus), nur einer wird beibehalten.
🎜Wir können diese Vergleichsregel mithilfe von Abschlüssen implementieren: 🎜
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)
🎜 Dann übergeben Sie den Abschluss als Parameter an die Funktion array_merge_distinct(): 🎜rrreee🎜Die Ausgabe des zusammengeführten Arrays für: 🎜rrreee🎜: 🎜rrreee🎜🎜Erweiterungen🎜🎜🎜Der Algorithmus kann nach Bedarf erweitert werden, um komplexere Vergleichsregeln oder benutzerdefiniertes Verhalten zu unterstützen. Wir können beispielsweise anhand der Eigenschaften von Objekten vergleichen oder Duplikate anhand des Hash-Werts von Elementen usw. entfernen. 🎜

Das obige ist der detaillierte Inhalt vonPHP-Array-Zusammenführungs- und Deduplizierungsalgorithmus: Benutzerdefinierte Regeln basierend auf Schließungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn