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」の値をパラメータとして渡しています。
処理の流れは以下の通りです。
- 内側の
array_map("serialize", $result)で、各配列要素を文字列に変換します。配列はそのままでは比較できないため、シリアライズによって比較可能な文字列にしています。 array_uniqueが、シリアライズされた文字列の中から重複を検出して削除します。- 外側の
array_map("unserialize", ...)で、文字列を元の配列形式に復元します。
この結果、重複していた要素が取り除かれ、ユニークな要素のみを含む配列が出力されます。この手法は、array_uniqueが多次元配列に直接対応していない場合に特に有効です。
-
PHPのarray()関数とは?配列の作成方法をわかりやすく解説
PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に
-
C#の配列から要素を削除する方法【サンプルコード付きで解説】
C#の配列は固定長のため、要素を直接「削除」することはできません。そこで一般的に用いられるのが、削除したい位置以降の要素を一つ前へずらす(シフトする)ことで、実質的にその要素を取り除く手法です。 基本的な考え方:要素をシフトして削除する まず、次のように5つの要素を持つ配列を用意します。 int[] arr = new int[5] {35, 50, 55, 77, 98}; たとえば2番目の位置(pos = 2、つまり arr[1])の要素「50」を削除したい場合は、その位置より後ろにある要素をすべて一つずつ前に移動させます。 // 削除位置以降の要素を前方へシフト for (i