PHPで配列中から重複したデータを探す方法

2022年10月28日金曜日

PHP

t f B! P L

複数行のデータを入力するような機能で必須となるのが「重複チェック」である。

この記事では、PHPで配列の中から重複するデータを探す方法を紹介する。

スポンサーリンク

array_count_values

array_count_values は、配列内で同じ値の出現回数を抽出する関数である。

実際に試してみよう。

以下の配列に対し array_count_values を実行した場合の結果は次のとおりである。

array_count_values(["PHP", "Java", "C#", "PHP"]);

■実行結果

=> [
     "PHP" => 2,
     "Java" => 1,
     "C#" => 1,
   ]

array_count_values の戻り値は、配列の値をキーとした、その値の出現回数を集計した連想配列が返る。上の結果では、配列の中で PHP の値が2回出現するため、戻り値の PHP キーに 2が入る。

重複チェックを行う場合は、この array_count_values 関数の戻り値で件数が2以上となっている要素を array_filter 等で抽出すればよい。

$ary = array_count_values(["PHP", "Java", "C#", "PHP"]);
array_filter($ary, fn ($v) => $v >= 2)

■実行結果

=> [
     "PHP" => 2,
   ]

連想配列に対して array_count_valuesを使った場合

array_count_values の引数に次のような連想配列を指定した場合も、配列の値に対して重複している件数が返されます。

$ary = array_count_values([
	"KEY1" => "VALUE1",
	"KEY2" => "VALUE1",
	"KEY3" => "VALUE3",
	"KEY1" => "VALUE4",
]);

■ 実行結果

=> [
     "VALUE4" => 1,
     "VALUE1" => 1,
     "VALUE3" => 1,
   ]

スポンサーリンク

複数の項目をキーに重複を探す

array_count_values は、配列の値で重複する件数を返す関数であるため、そのままでは複数の項目をキーに重複する件数を求めることはできません。

連想配列や classなどのオブジェクトで、複数の項目をキーに重複する件数を求める場合は、次のように array_map と組み合わせて使う方法などがあります。

$keys = array_map(fn($item) => $item->key1 . $item->key2, $items);
array_count_values($keys);
スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ