ラボ > PHP:配列関連

PHP 配列・重複データの確認

配列内にあるデータが重複しているか、重複データのみ・重複していないデータのみの抽出など

作成日:2019-11-07, 更新日:2019-11-07

基本

・「複数の配列を比較」ではなく、「一つの配列の中にあるデータを比較」って感じの場合。

元の配列

$ary = array(
  'd',
  'a',
  'b',
  'c',
  'a',
  'b',
);

重複データがあるか確認したい

・「d,a,b,c,a,b」には「a,b」が重複しているので、「重複アリ」としたい。

$uq_ary = array_unique($ary);
if ( count($uq_ary) == count($ary) ) {
  echo '重複なし';
}
else {
  echo '重複アリ';
}
//重複アリ

各データの個数が知りたい

・「d,a,b,c,a,b」でそれぞれの個数を知りたい

$cnt_ary = array_count_values($ary);
var_export($cnt_ary);
//array (
//  'd' => 1,
//  'a' => 2,
//  'b' => 2,
//  'c' => 1,
//)

ユニーク値、重複データのみ、重複していないデータのみ取得

・「d,a,b,c,a,b」から「d,a,b,c」を取得 - ユニーク値
・「d,a,b,c,a,b」から「a,b」を取得 - 重複データのみ
・「d,a,b,c,a,b」から「d,c」を取得 - 重複していないデータのみ

含まれるデータのユニーク値を抽出

・「d,a,b,c,a,b」から「d,a,b,c」にしたい。

$uq_ary = array_unique($ary);
var_export($uq_ary);
//array (
//  0 => 'd',
//  1 => 'a',
//  2 => 'b',
//  3 => 'c',
//)

重複データのみ or 重複していないデータのみ抽出

・そんな便利な関数は無いみたい。

$ary_y = array();
$ary_n = array();

$cnt_ary = array_count_values($ary);
foreach ( $cnt_ary as $k=>$v ) {
  if ( 1 < $v ) {
    // 重複あり
    $ary_y[] = $k;
  }
  else {
    // 重複していない
    $ary_n[] = $k;
  }
}
var_export($ary_y);
//array (
//  0 => 'a',
//  1 => 'b',
//)

var_export($ary_n);
//array (
//  0 => 'd',
//  1 => 'c',
//)