ホームページ > バックエンド開発 > PHPチュートリアル > PHP 配列のマージおよび重複排除アルゴリズム: クロージャに基づくカスタム ルール

PHP 配列のマージおよび重複排除アルゴリズム: クロージャに基づくカスタム ルール

WBOY
リリース: 2024-04-20 12:12:02
オリジナル
835 人が閲覧しました

クロージャーを使用してカスタム比較ルールを定義し、配列をマージおよび重複除去します。クロージャーは 2 つの要素を受け入れ、等しい要素が破棄されることを示すブール値を返します。配列を走査し、クロージャを使用して重複排除することにより、最終的にカスタム ルールによる配列のマージと重複排除が実装されます。

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

PHP 配列のマージと重複排除アルゴリズム: クロージャに基づくカスタム ルール

PHP 開発では、配列と重複をマージする必要があることがよくあります。重複を削除します。ただし、デフォルトの array_merge() 関数は、特にマージされた要素をカスタム ルールに従って重複排除する必要がある場合、すべてのシナリオを満たすことができません。この記事では、カスタム ルールを使用して配列のマージと重複排除の操作を実装するためのクロージャ ベースのアルゴリズムを紹介します。

アルゴリズム原理

このアルゴリズムは、クロージャを比較関数として使用することにより、カスタム重複排除ルールを実装します。クロージャは 2 つの要素をパラメータとして受け取り、2 つの要素が等しいかどうかを示すブール値を返します。クロージャによって 2 つの要素が等しいと判断された場合、そのうちの 1 つだけが保持されます。

コードの実装

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);
}
ログイン後にコピー

実践的なケース

2 つの配列があるとします。

$arr1 = ['a', 'b', 'c'];
$arr2 = ['b', 'd', 'e'];
ログイン後にコピー

We Arraysは、次のルールに従ってマージおよび重複排除されます。

  • 2 つの要素が等しい場合 (厳密モード)、1 つだけが保持されます。

この比較ルールはクロージャを使用して実装できます:

$compare_func = function ($value1, $value2) {
    return $value1 === $value2;
};
ログイン後にコピー

次に、クロージャをパラメータとして array_merge_distinct() 関数に渡します:

$merged = array_merge_distinct($arr1, $arr2, $compare_func);
ログイン後にコピー

マージされた配列は次のとおりです:

echo print_r($merged, true);
ログイン後にコピー

出力:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)
ログイン後にコピー

拡張機能

アルゴリズムは、より複雑な比較ルールをサポートするために、必要に応じて拡張できます。またはカスタム動作。たとえば、オブジェクトのプロパティに基づいて比較したり、要素のハッシュ値に基づいて重複を削除したりできます。

以上がPHP 配列のマージおよび重複排除アルゴリズム: クロージャに基づくカスタム ルールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート