Home >Backend Development >PHP Tutorial >PHP array merging and deduplication algorithm: custom rules based on closures

PHP array merging and deduplication algorithm: custom rules based on closures

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

Define custom comparison rules through closures to merge and deduplicate arrays. Closures accept two elements and return a Boolean value to indicate equality. Equal elements will be discarded. By traversing the array and using closures to deduplicate, array merging and deduplication with custom rules are finally implemented.

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

PHP array merging and deduplication algorithm: custom rules based on closures

In PHP development, we often need to merge Array and remove duplicates. However, the default array_merge() function cannot satisfy all scenarios, especially when the merged elements need to be deduplicated according to custom rules. This article will introduce a closure-based algorithm to implement array merging and deduplication operations with custom rules.

Algorithm Principle

This algorithm implements custom deduplication rules by using closures as comparison functions. The closure receives two elements as parameters and returns a Boolean value indicating whether the two elements are equal. If two elements are judged equal by the closure, only one of them is retained.

Code implementation

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

Practical case

Suppose we have two arrays:

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

We Arrays are merged and deduplicated according to the following rules:

  • If two elements are equal (strict mode), only one is retained.

We can implement this comparison rule using closures:

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

Then, pass the closure as a parameter to the array_merge_distinct() function:

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

The merged array is:

echo print_r($merged, true);

Output:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

Extension

The algorithm can be extended as needed to support more complexity comparison rules or custom behavior. For example, we can compare based on the properties of objects, or remove duplicates based on the hash value of elements, etc.

The above is the detailed content of PHP array merging and deduplication algorithm: custom rules based on closures. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn