PHPで配列の交差部分を削除する方法

PHPz
リリース: 2023-04-18 14:41:58
オリジナル
616 人が閲覧しました

PHP では、配列の交差部分の削除は一般的なタスクです。交差とは、2 つ以上の配列に共通する値です。場合によっては、配列に対して特定の操作や比較を実行するために、1 つ以上の配列から交差部分を削除する必要がある場合があります。この記事では、このタスクを達成するために役立ついくつかの方法とその長所と短所を紹介します。

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

PHP には、array_diff という組み込み関数があり、別の配列または複数の配列に存在する 1 つの配列の要素を返すことができます。この関数を使用して、2 つ以上の配列間の共通部分を削除できます。

$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(3, 4, 5, 6, 7);

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

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

上の例では、array_diff 関数を使用して、$arr2 に存在しない $arr1 の要素を取得します。これは交差点が削除されたことを意味します。

利点:

  • 使いやすく、タスクを完了するために必要なコードは 1 行だけです。
  • 2 つの配列間の交差部分を削除するだけであれば、これが最も速い方法です。

欠点:

  • この方法は、3 つ以上の配列から交差を削除する必要がある場合には適さない可能性があります。 array_diff を複数回呼び出す必要があり、関係する配列の数がパフォーマンスに影響します。
  • 元の配列を保持する必要がある場合は、最初の配列を 2 番目の配列に再割り当てするなど、追加の作業が必要になります。

方法 2: foreach ループを使用する

もう 1 つの方法は、foreach ループを使用することです。このメソッドの考え方は、最初の配列をループし、その各要素が他の配列に存在するかどうかを確認することです。要素が存在する場合、その要素は最初の配列から削除されます。

$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(3, 4, 5, 6, 7);

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

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

上の例では、foreach を使用して $arr1 をループし、in_array 関数を使用して現在の要素が $arr2 に存在するかどうかを確認します。存在する場合は、unset 関数を使用して $arr1 から要素を削除します。

利点:

  • 複数の配列から交差を削除できます。
  • 元の配列を保持する必要がある場合、追加の作業は必要ありません。

欠点:

  • 複数のループと in_array 関数呼び出しが必要なため、特に大規模な配列の場合、パフォーマンスが低下します。
  • 元の配列内の要素のキーを保持する必要がある場合は、さらに作業が必要です。

方法 3: array_filter 関数を使用する

もう 1 つの方法は、array_filter 関数を使用することです。この関数は、一連のルールに基づいて配列内の要素をフィルターします。配列内の各要素が他の配列に存在するかどうかを確認するコールバック関数を定義できます。存在する場合、要素は削除されます。

$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(3, 4, 5, 6, 7);

$callback = function($value) use ($arr2) {
    return !in_array($value, $arr2);
};

$result = array_filter($arr1, $callback);

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

上の例では、array_filter 関数とコールバック関数を使用して、$arr2 に存在しない $arr1 の要素を取得します。コールバック関数は use ステートメントを使用して $arr2 を渡します。

利点:

  • コールバック関数は複数回使用できるため、複数の配列から交差を削除できます。
  • 元の配列を保持する必要がある場合、追加の作業は必要ありません。

欠点:

  • 複数のコールバック関数呼び出しと in_array 関数呼び出しが必要なため、パフォーマンスが低下します。

要約すると、2 つの配列間の交差部分を削除するだけの場合は、array_diff 関数を使用するのが最も高速です。複数の配列から交差部分を削除する必要がある場合は、foreach ループまたは array_filter 関数を使用することをお勧めします。ニーズに応じて、タスクを完了するために最も適切な方法を選択してください。

以上がPHPで配列の交差部分を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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