ホームページ > バックエンド開発 > PHPの問題 > PHPで配列のさまざまな要素を比較する方法

PHPで配列のさまざまな要素を比較する方法

PHPz
リリース: 2023-04-18 14:40:32
オリジナル
730 人が閲覧しました

PHP では、2 つの配列間で異なる要素を比較することは一般的なニーズです。例:

  • Web サイトの 2 つの異なるバージョン間でページ パスが異なるかどうかを比較するパート
  • 2 つの CSV ファイル間の異なる行を比較する
  • 2 つの異なるデータベース間のテーブル構造を比較して、相違点があるかどうかを確認します

この記事では、配列の異なる要素を比較するいくつかの方法を紹介します。 PHPで。

方法 1: array_diff 関数を使用する

array_diff 関数は、配列の違いを比較する PHP の組み込み関数です。この関数の使用方法は次のとおりです:

array array_diff ( array $array1 , array $array2 [, array $... ] )
ログイン後にコピー

この関数は 2 つの配列パラメーターを受け入れ、2 番目の配列には現れない最初の配列の要素を含む新しい配列を返します。

たとえば、次のコードは 2 つの配列の差を比較します。

$arr1 = [1, 2, 3, 4, 5];
$arr2 = [4, 5, 6, 7, 8];

$diff = array_diff($arr1, $arr2);

print_r($diff); // 输出 [1, 2, 3]
ログイン後にコピー

array_diff 関数は 2 つの配列の異なる要素を見つけることができますが、配列内に重複した要素がある場合、この関数は誤った結果が発生する可能性があります。

例:

$arr1 = [1, 2, 3, 3, 3, 4, 5];
$arr2 = [3, 4, 5, 5, 5, 6, 7];

$diff = array_diff($arr1, $arr2);

print_r($diff); // 输出 [1, 2]
ログイン後にコピー

この例では、$diff 配列の結果は [1, 2, 3] になるはずですが、両方の $arr1 に複数の「3」があるためです。および $arr2 配列 ” と 5” であるため、array_diff 関数は違いを正しく比較できません。

方法 2: array_diff_assoc 関数を使用する

array_diff_assoc 関数も PHP の組み込み関数ですが、この関数は 2 つの配列のキーと値が等しいかどうかを比較します。

この関数の使用法は次のとおりです:

array array_diff_assoc ( array $array1 , array $array2 [, array $... ] )
ログイン後にコピー

2 つ以上の配列パラメータを受け入れ、最初の配列内の他の配列に存在しない要素、またはキーと値が含まれるすべての要素を返します。等しくありません。

例:

$arr1 = ["a" => 1, "b" => 2, "c" => 3];
$arr2 = ["a" => 1, "b" => 2, "c" => 4];

$diff = array_diff_assoc($arr1, $arr2);

print_r($diff); // 输出 ["c" => 3]
ログイン後にコピー

この例では、$diff 配列の結果は ["c" => 3] になります。これは、$ の "c" キーに対応する値が存在するためです。 arr1 配列は 3 です。 $arr2 配列にそのようなキーがないか、値が 3 に等しくありません。

方法 3: カスタム関数を使用する

カスタム関数を使用して 2 つの配列の異なる要素を比較することは、多用途でカスタマイズ可能な方法です。

たとえば、次の関数は 2 つの配列内の異なる要素を比較します:

function array_diff_custom($arr1, $arr2) {
    $diff = [];

    foreach ($arr1 as $key => $value) {
        if (!in_array($value, $arr2)) {
            $keyInArr2 = array_search($value, $arr2);
            if ($keyInArr2 !== false) {
                unset($arr2[$keyInArr2]);
            }
            $diff[$key] = $value;
        }
    }

    foreach ($arr2 as $key => $value) {
        $diff[$key] = $value;
    }

    return $diff;
}
ログイン後にコピー

この関数は次の関数を実装します:

  • $ 内のすべての要素を走査します。 arr1 要素が $arr2 にない場合は $diff 配列に追加し、そうでない場合は $arr2 から削除します。
  • $arr2 内のすべての要素をスキャンし、$diff 配列に追加します。

例:

$arr1 = [1, 2, 3, 3, 3, 4, 5];
$arr2 = [3, 4, 5, 5, 5, 6, 7];

$diff = array_diff_custom($arr1, $arr2);

print_r($diff); // 输出 [0 => 1, 1 => 2, 2 => 3, 5 => 4, 6 => 5, 7 => 6, 8 => 7]
ログイン後にコピー

カスタム関数はトラバーサルを使用するため、効率が低く、配列が大きい場合にはパフォーマンスの問題が発生する可能性があります。

結論

この記事では、PHP で配列の異なる要素を比較する 3 つの方法、array_diff 関数、array_diff_assoc 関数、カスタム関数を紹介します。それぞれに利点と欠点があります。適切な方法を選択するアプリケーションのシナリオと特定のニーズによって異なります。

以上がPHPで配列のさまざまな要素を比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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