【PHP入門】配列の重複処理まとめ

PHPでは、配列を使用してさまざまな処理が可能です。

この記事では、

・重複した値をカウントする方法

という基本的な内容から、

・重複した要素のみを抽出する方法
・重複しない要素のみを抽出する方法

などの応用的な使い方に関しても解説していきます。

今回はそんな配列の重複処理について、わかりやすく解説します!

目次

重複した値をカウントする

array_count_values関数を使用する

array_count_values関数は、指定した配列の値と、配列の中での使用回数をカウントします。

戻り値は、連想配列のキーと、設定している要素の回数を合わせた連想配列を返します。

array_count_values ( $配列名 )

array_count_values関数を使用した、重複した値をカウントする方法を以下に記述します。

<?php

$fruits = [0=>'apple', 1=>'orange', 2=>'apple', 3=>'orange', 4=>'banana'];

//array_count_valuesを使用して値の使用回数をカウントする
$fruits_count = array_count_values($fruits);

foreach($fruits_count as $key => $value){
  echo 'key : '.$key;
  echo '<br>';
  echo ' value : '.$value;
  echo '<br>';
}

?>
実行結果
key : apple
value : 2
key : orange
value : 2
key : banana
value : 1

重複した要素のみを抽出する

ここでは、重複した要素のみを取得する方法として、array_intersect関数を使用する方法とループで比較して抽出する方法の2パターンを紹介します。

array_intersect関数を使用する

array_intersect関数は、$配列1と全ての引数に存在する値を抽出した配列で返します。

array_intersect($配列1, $配列2 [, $配列3 …]);

array_intersect関数を使用して、重複した要素のみを抽出する方法を以下に記述します。

<?php

$fruits1 = ['apple', 'orange', 'melon'];
$fruits2 = ['orange', 'pineapple', 'apple'];

$fruits_merge = array_intersect($fruits1, $fruits2);

foreach($fruits_merge as $value){
  echo $value;
  echo '<br>';
}

?>
実行結果
apple
orange

ループを使用して比較する

比較する配列1と配列2で重複した値を、array_intersect関数を使用せずに抽出する場合は、以下のようにループを使用します。

<?php

$fruits1 = ['apple', 'orange', 'melon'];
$fruits2 = ['orange', 'pineapple', 'apple'];

foreach($fruits1 as $value1){
  foreach($fruits2 as $value2){

    // 配列の値を順番に比較する
    if ($value1 == $value2){
      $fruits_merge[] = $value1;
    }
  }
}

foreach($fruits_merge as $value){
  echo $value;
  echo '<br>';
}

?>
実行結果
apple
orange

サンプルでは配列$fruits1と$fruits2をそれぞれループで回して値を順番に比較していき、重複した値が存在した場合は配列$fruits_mergeに随時格納しています。

array_intersect関数を使用したほうが処理が少なくて済みますが、抽出はしたいけど特定の要素のみは除外したい場合などは、紹介したループ処理を使用すると便利です。

なお、比較対象の配列の差分のみを取得する場合にはarray_diff関数を使用します。

array_diff関数については、以下の記事で詳しく解説しています。

重複したキーのみを抽出する

連想配列で重複しているキーのみを取得する場合は、以下のように記述します。

<?php

$fruits1 = [0=>'apple', 1=>'orange', 2=>'melon', 3=>'banana', 4=>'pineapple'];
$fruits2 = [5=>'apple', 6=>'orange', 7=>'melon', 1=>'banana', 2=>'pineapple'];

foreach($fruits1 as $key1 => $value1){
  foreach($fruits2 as $key2 => $value2){

    // 連想配列のキーを順番に比較する
    if ($key1 == $key2){
      $fruits_merge[] = $key1;
    }
  }
}

foreach($fruits_merge as $value){
  echo $value;
  echo '<br>';
}

?>
1
2

重複した要素のみを抽出するときのサンプルと同様に、ループで回してキーを順番に比較していき、重複しているキーが存在した場合は配列$fruits_mergeに随時格納しています。

連想配列をforeachでループするときは、1次元配列と書き方が異なるので注意しましょう。

配列をループで回す処理は、以下の記事で詳しく解説しています。

重複しない要素のみを抽出する

重複しない要素のみを抽出する場合は、重複した値のみを削除して差分を取得するarray_diff関数を使用します。

array_diff関数については、以下の記事で詳しく解説しています。

まとめ

ここでは、重複した値をカウントしたり、取得する方法などについて解説しました。

配列を扱った処理は、実際の開発でもよく使用しますので、この機会にぜひ覚えておきましょう。

もし、配列の重複処理を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次