ホームページ  >  記事  >  バックエンド開発  >  PHP で 2 次元配列の差分セットを効率的に見つける方法

PHP で 2 次元配列の差分セットを効率的に見つける方法

PHPz
PHPzオリジナル
2023-04-26 09:10:511085ブラウズ

PHP 開発プロセスでは、配列のマージ、重複排除、交差、結合など、配列に対して何らかの操作を実行する必要があることがよくあります。配列の差分は非常に重要な種類の配列演算であり、2 つの配列の異なる部分を効率的に見つけるのに役立ちます。この記事では、PHP言語を使って2次元配列の差分集合を効率的に求める方法を紹介します。

  1. 2 次元配列とは

2 次元配列の差分セットを見つける方法を学び始める前に、まず 2 次元配列が何であるかを理解する必要があります。 -次元配列です。 2 次元配列とは、配列内の各要素が配列であること、つまり、配列に複数の配列が含まれていることを意味します。 2 次元配列は、データ テーブルや統計データの処理などの実際のアプリケーションで非常に一般的であるため、2 次元配列の操作方法を習得する必要があります。

  1. 2 つの配列の差を計算する

PHP では、array_diff 関数を使用して 2 つの 1 次元配列の差を計算できますが、2 次元配列の場合は異なります。言い換えれば、それを解決するには他の方法を使用する必要があります。次に、2 つの 2 次元配列の差分集合を計算する方法を紹介します。

2 つの 2 次元配列 $firstArray と $secondArray があるとします。それらの差を計算し、その差を $resultArray に保存する必要があります。次のコードを使用できます。

$resultArray = array();
foreach($firstArray as $firstItem){
    $flag = true;
    foreach($secondArray as $secondItem){
        if($firstItem == $secondItem){
            $flag = false;
            break;
        }
    }
    if($flag){
        $resultArray[] = $firstItem;
    }
}

上記のコードでは、2 つの foreach ループを使用して 2 つの 2 次元配列を走査し、それらの要素をそれぞれ $firstItem と $secondItem に格納します。次に、変数 $flag を使用して、条件が満たされているかどうかをマークします。 $firstItem が $secondArray にすでに存在する場合は、$flag を false に設定します。最後に、$flag がまだ true に等しい場合は、$firstItem が $secondArray に存在せず、それを $resultArray に格納する必要があることを意味します。

上記の方法は実行可能ですが、大規模な 2 次元配列を扱う場合は比較的非効率的です。パフォーマンスを向上させるために、いくつかの PHP 関数を使用して上記のコードを簡素化できます。

  1. array_udiff 関数の使用

PHP には、2 つの配列 (または複数の配列) の差を計算するために使用できる array_udiff 関数が用意されています。この関数の機能は上記の foreach ループと同じですが、foreach ループよりも効率的です。次のコードを使用して、2 つの 2 次元配列の差を計算できます。

function compareArray($a, $b) {
    return $a == $b ? 0 : 1;
}
$resultArray = array_udiff($firstArray, $secondArray, 'compareArray');

上記のコードでは、2 つの要素が等しいかどうかを判断するために関数 CompareArray をカスタマイズしました。等しい場合は 0 を返し、そうでない場合は 1 を返します。 array_udiff 関数を呼び出すときは、2 つの 2 次元配列 $firstArray と $secondArray、およびカスタム関数 CompareArray をパラメータとして渡します。 array_udiff 関数は、compareArray 関数に基づいて 2 つの配列の要素を比較し、同一の要素を削除し、最後に 2 つの配列の差分を返します。

  1. array_map 関数と array_column 関数の使用

array_udiff 関数の使用に加えて、array_map 関数と array_column 関数を使用して 2 次元の差分セットを処理することもできます。配列。 array_map 関数は、指定された関数を配列内の各要素に適用し、新しい配列を返します。 array_column 関数は、2 次元配列から列を抽出し、新しい 1 次元配列を返すことができます。

以下では、上記 2 つの関数を結合し、次のコードを使用して 2 つの 2 次元配列の差分セットを計算します。

$diffArray = array_map(function($item) use($secondArray) {
    $existKey = array_search($item['id'], array_column($secondArray, 'id'));
    return $existKey === false ? $item : null;
}, $firstArray);
$resultArray = array_filter($diffArray);

上記のコードでは、array_map 関数を使用して $ を変換します。 firstArray into の各要素が無名関数に適用されます。無名関数では、array_search 関数を使用して、同じ要素が $secondArray に存在するかどうかを検索します。存在する場合は null を返し、存在しない場合は要素を返します。最後に、array_filter 関数を使用して null 値を削除し、最後に 2 つの 2 次元配列の差分セットを取得します。

  1. 概要

配列の差分は、PHP 開発でよく使用される操作であり、2 つの 2 次元配列内の異なる値を効率的に見つけるのに役立ちます。この記事では、2 次元配列の差分を計算するための 3 つの方法 (foreach ループ、array_udiff 関数、array_map 関数、array_column 関数を使用する) を紹介しました。 foreach ループと比較すると、後の 2 つの方法はより効率的であり、大規模な 2 次元配列を処理する場合に効率的です。実際の開発プロセスでは、実情に応じて最適な方法を選択する必要があります。

以上がPHP で 2 次元配列の差分セットを効率的に見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。