PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPで連想配列の重複要素を削除する方法

array_map関数とは

PHPのarray_map関数は、配列の各要素の値をユーザー定義関数に渡し、その関数を各要素に適用した結果として新しい配列を返します。これにより、配列全体の要素に対して一括で処理を行うことができます。

array_map関数の構文

array_map ( ユーザー定義関数, array_1, array_2, array_3…)

ユーザー定義関数とarray_1は必須の引数ですが、array_2以降の配列は省略可能です。

連想配列の重複を削除する例

多次元の連想配列から重複した要素を削除するには、serialize関数とunserialize関数をarray_mapと組み合わせて使用します。まず各要素を文字列にシリアライズし、array_uniqueで重複を除去した後、元の配列形式に復元します。

$result = array(
    0=>array('a'=>1,'b'=>'Hello'),
    1=>array('a'=>1,'b'=>'duplicate_val'),
    2=>array('a'=>1,'b'=>'duplicate_val')
);
$unique = array_map("unserialize", array_unique(array_map("serialize", $result)));
print_r($unique);

出力結果

上記のコードを実行すると、以下のような出力が得られます。

Array ( [0] => Array ( [a] => 1 [b] => Hello ) [1] => Array ( [a] => 1 [b] => duplicate_val ) )

コードの解説

上記のコードでは、3つの要素を持つ配列を定義し、変数「result」に代入しています。その後、array_map関数を呼び出し、「result」の値をパラメータとして渡しています。

処理の流れは以下の通りです。

  1. 内側のarray_map("serialize", $result)で、各配列要素を文字列に変換します。配列はそのままでは比較できないため、シリアライズによって比較可能な文字列にしています。
  2. array_uniqueが、シリアライズされた文字列の中から重複を検出して削除します。
  3. 外側のarray_map("unserialize", ...)で、文字列を元の配列形式に復元します。

この結果、重複していた要素が取り除かれ、ユニークな要素のみを含む配列が出力されます。この手法は、array_uniqueが多次元配列に直接対応していない場合に特に有効です。

  1. PHPのarray()関数とは?配列の作成方法をわかりやすく解説

    PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に

  2. C#の配列から要素を削除する方法【サンプルコード付きで解説】

    C#の配列は固定長のため、要素を直接「削除」することはできません。そこで一般的に用いられるのが、削除したい位置以降の要素を一つ前へずらす(シフトする)ことで、実質的にその要素を取り除く手法です。 基本的な考え方:要素をシフトして削除する まず、次のように5つの要素を持つ配列を用意します。 int[] arr = new int[5] {35, 50, 55, 77, 98}; たとえば2番目の位置(pos = 2、つまり arr[1])の要素「50」を削除したい場合は、その位置より後ろにある要素をすべて一つずつ前に移動させます。 // 削除位置以降の要素を前方へシフト for (i