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

PHPz
リリース: 2023-04-19 13:46:29
オリジナル
613 人が閲覧しました

PHP プログラミングでは、特に複数の配列の交差部分を処理する必要がある場合に、2 つの配列の交差部分を削除するという問題に遭遇することがよくあります。この記事では、2 つの配列間の交差部分を削除する簡単で実用的な方法を紹介します。

1. 問題の説明

それぞれ次のような 2 つの配列 $A と $B があるとします:

$A = array(1,2,3,4, 5 ,6);

$B = array(4,5,7,8,9,10);

要件は、$A と $B のすべての要素のみを保持することです。配列の交差部分、つまり結果の配列は次のようになります。

$Result = array(1,2,3,6,7,8,9,10);

それではどうすればよいでしょうか?実装はどうすればよいでしょうか?以下、一つずつご紹介していきます。

2. 方法 1

まず、PHP の array_diff 関数を使用して、配列要素の差分演算を実装できます。コードは次のとおりです:

$ Result = array_merge(array_diff ($A, $B), array_diff($B, $A));

上記のコードでは、array_diff($A, $B) は、$A 内の項目をフィルターで除外することを意味します。 $B には含まれない配列 配列内の要素; array_diff($B, $A) は、$B 配列にはあるが $A 配列には含まれない要素をフィルターで除外することを意味します。次に、array_merge 関数を使用して、2 つの結果の配列を結合します。この方法は単純に見えますが、実際には、次の点に示すように堅牢ではありません。

  1. は、配列内に複数の同一の要素がある状況を処理できません。 2 つの配列をマージする場合、実際には同じ要素がマージされるため、重複を削除することはできません。
  2. 一貫性のない要素タイプを処理できません。たとえば、$A には文字列型要素 'hello' がありますが、$B にはありませんが、最終出力の Result 配列がすべての要素の和集合であることが望まれる場合、array_merge 関数を使用するとエラーが報告されます。

したがって、これらの問題をより適切に回避するには、より堅牢な方法を使用して配列要素の交差部分を削除する必要があります。

3. 方法 2

次に、配列内の各要素をループし、その過程で重複排除とフィルター操作を実行できます。コードは次のとおりです。

$Result = array();

foreach($A as $value){

if(!in_array($value, $B)){
    $Result[] = $value;
}
ログイン後にコピー

}

foreach( $B as $value){

if(!in_array($value, $Result)){
    $Result[] = $value;
}
ログイン後にコピー

}

上記のコードでは、最初に最終結果の配列を表す空の配列 $Result を定義します。次に、2 つの foreach ループを使用して、$A と $B の各要素を反復処理します。プロセス中に、in_array 関数を使用して、現在の要素が別の配列に存在するかどうか ($B に存在するかどうかなど) を判断します。以前に表示されていない場合は、$Result に追加されます。最終的な $Result 配列は、2 つの配列内のすべての要素を結合したものです。

このメソッドを使用すると、次の利点があります。

  1. 要素は新しい配列に 1 つずつ追加されるため、配列内に同一の要素が複数ある状況に対処できます。
  2. in_array 関数によって要素の値が 1 つずつ比較されるため、要素の型が一致しない場合でも処理できます。
  3. 配列サイズが小さい場合、効率は高くなります。

4. 概要

この記事では、PHP で配列の交差の問題に対処する 2 つの方法、array_diff 関数の使用とループ トラバーサル フィルタリングの使用を紹介します。どちらの方法でも正しい結果が得られますが、ループ トラバーサルを使用する方法はより堅牢で、より多くのエッジ ケースを処理できるため、学習する価値があります。

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

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