複数行のデータを入力するような機能で必須となるのが「重複チェック」である。
この記事では、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);
0 件のコメント:
コメントを投稿