【PHP】array_unique()で重複削除する方法|実装例と多次元配列の対応も紹介

PHPで配列を扱っていると、重複したデータを取り除きたい場面がよくあります。
例えば、ユーザーが選択したタグの一覧や、データベースから取得したカテゴリ名の一覧など、同じ値が複数含まれているケースは珍しくありません。
重複を残したまま処理を進めると、表示が二重になったり、データの集計結果がずれてしまう原因にもなります。
そこで便利なのが、PHPのarray_unique()関数です。
この記事では、PHP初心者でもすぐに使える「配列から重複データを削除する方法」を丁寧に解説していきます。
PHPで配列の重複を削除する方法は?
配列から重複した値を取り除く最もシンプルな方法は、array_unique()関数を使うことです。
基本的な使い方は、このようになります。
<?php
$fruits = ["りんご", "バナナ", "りんご", "みかん", "バナナ"];
$unique = array_unique($fruits);
print_r($unique);
?>
出力結果はこちらです。
Array
(
[0] => りんご
[1] => バナナ
[3] => みかん
)
これだけで、重複した「りんご」や「バナナ」が1つにまとめられます。
array_unique()関数はPHPの組み込み関数なので、特別なライブラリを追加する必要もなく、手軽に利用できます。
なお、出力結果を見るとわかるように、重複が見つかった場合は最初に出現した要素が残り、後から出現した要素が削除されます。
また、元の配列のキー(インデックス)がそのまま保持される点も覚えておきましょう。
詳細は公式マニュアル(PHP: array_unique – Manual)も確認すると安心です。
array_uniqueの詳しい使い方
こちらのセクションでは、array_unique()関数の詳しい使い方を説明していきます。
まず、使用できる引数はこちらです。
第1引数:重複を削除したい配列
第2引数:比較時のソートフラグ(省略可)
第2引数では、値を比較する際の方法を指定できます。
それでは、実際にコードを書きながら説明します。
デフォルトの動作(文字列として比較)
第2引数を省略した場合、デフォルトではSORT_STRINGが適用され、値を文字列として比較します。
<?php
$data = ["100", 100, "100"];
$unique = array_unique($data);
print_r($unique);
// 出力:Array ( [0] => 100 )
?>
文字列の"100"と整数の100が同じものとして扱われ、1つにまとめられます。
ソートフラグを指定する
第2引数にソートフラグを指定すると、比較の方法を変更できます。
主なソートフラグはこちらです。
SORT_STRING(デフォルト):文字列として比較SORT_REGULAR:型変換をせずに通常の比較SORT_NUMERIC:数値として比較SORT_LOCALE_STRING:現在のロケールに基づいて文字列比較
例えば、SORT_REGULARを使うと型の違いも区別されます。
<?php
$data = ["100", 100, "100"];
$unique = array_unique($data, SORT_REGULAR);
print_r($unique);
// 出力:Array ( [0] => 100 [1] => 100 )
?>
文字列の"100"と整数の100が別の値として扱われ、両方が残ります。
array_uniqueのよくある実装例
実際によくある場面を想定し、いくつかの実装例を紹介します。
タグやカテゴリの重複を除去する
<?php
$tags = ["PHP", "Laravel", "PHP", "JavaScript", "Laravel"];
$uniqueTags = array_unique($tags);
print_r($uniqueTags);
// 出力:Array ( [0] => PHP [1] => Laravel [3] => JavaScript )
?>
キーを振り直す(array_valuesとの組み合わせ)
array_unique()は元のキーを保持するため、キーが歯抜けになることがあります。
連番のキーに振り直したい場合は、array_values()と組み合わせましょう。
<?php
$fruits = ["りんご", "バナナ", "りんご", "みかん", "バナナ"];
$unique = array_values(array_unique($fruits));
print_r($unique);
// 出力:Array ( [0] => りんご [1] => バナナ [2] => みかん )
?>
キーが[0] [1] [2]と連番になり、扱いやすくなります。
連想配列の値で重複を削除する
連想配列の場合でも、array_unique()は値を基準に重複を除去してくれます。
<?php
$users = [
"user1" => "田中",
"user2" => "佐藤",
"user3" => "田中",
"user4" => "鈴木",
];
$unique = array_unique($users);
print_r($unique);
// 出力:Array ( [user1] => 田中 [user2] => 佐藤 [user4] => 鈴木 )
?>
array_uniqueを使うときの注意点
array_unique()は便利な関数ですが、初心者がハマりやすい注意点もあります。
- 元の配列のキーがそのまま保持される
重複を削除した後、キーが歯抜けになります。連番にしたい場合はarray_values()と組み合わせましょう。 - 多次元配列には対応していない
array_unique()は一次元配列にのみ対応しています。多次元配列の重複削除には別の方法が必要です。 - デフォルトでは文字列として比較される
型が異なる値(例:文字列の"1"と整数の1)も同じと判定されます。型も区別したい場合は、第2引数にSORT_REGULARを指定しましょう。
多次元配列の重複を削除したい場合の一例はこちらです。
<?php
$items = [
["id" => 1, "name" => "りんご"],
["id" => 2, "name" => "バナナ"],
["id" => 1, "name" => "りんご"],
];
$unique = array_unique(array_map('serialize', $items));
$result = array_values(array_map('unserialize', $unique));
print_r($result);
?>
serialize()で一度文字列化してから重複を判定し、その後unserialize()で元に戻すというテクニックです。
まとめ
今回は、PHPユーザー向けに、配列から重複データを削除する方法を紹介しました。
- PHPで配列の重複を削除するなら
array_unique()関数が一番簡単 - 第2引数のソートフラグで、比較方法をカスタマイズできる
- キーを振り直したい場合は
array_values()と組み合わせる - 多次元配列には直接対応していないので、
serialize()などを活用する
array_unique()関数を使いこなすことで、データの整理や集計処理がかなりスムーズになります。
配列操作をさらに深く学びたい方は、PHPの配列関数一覧もチェックしてみましょう。
























