- PHP
array_uniqueの実務使用例5選
配列の中から重複する値を取り除きたいときに便利なのが、array_unique() です。
一見シンプルな関数ですが、業務系のWebアプリでも意外と使う場面が多いです。
この記事では、まず構文を簡単に説明し、その後に実務での使用例を5つ紹介します。
array_uniqueの基本構文
まずは簡潔に構文を紹介します。詳細はPHP公式ドキュメントをご確認ください。
array_unique(array $array, int $flags = SORT_STRING): array説明:
配列内の重複する値を削除して、新しい配列を返します。
キーは保持されます(最初に出現した要素のキーが残る点に注意)。
$names = ['taro', 'hanako', 'taro', 'jiro'];
$result = array_unique($names);
print_r($result);
// 出力結果
// Array
// (
// [0] => taro
// [1] => hanako
// [3] => jiro
// )実務での使用例(業務系Webサービス編)
以下では、業務系システムの各フェーズ(バリデーション・ユースケース・リポジトリなど)での使用イメージを紹介します。
① バリデーションフェーズ:重複した入力を排除
たとえば「複数のタグを選択するフォーム」で、ユーザーが同じタグを何度も選択しても重複しないように処理するケース。
// リクエストで送られてきたタグIDの配列
$tags = $request->input('tag_ids', []);
// 重複排除
$uniqueTags = array_unique($tags);
// 例えば、存在確認などのバリデーション処理
foreach ($uniqueTags as $tagId) {
if (!Tag::find($tagId)) {
throw new \Exception("タグが存在しません: {$tagId}");
}
}ポイント:
UIで重複を防げなくても、サーバー側で array_unique をかけておくと堅牢。
② サービス層/ユースケース層:ドメインロジック内での重複排除
売上レポートなどで「同じ顧客IDを一意に集計したい」ような場面。
$orders = $this->orderRepository->getMonthlyOrders($month);
// 顧客IDの重複を排除して、ユニーク顧客数を算出
$customerIds = array_column($orders, 'customer_id');
$uniqueCustomers = array_unique($customerIds);
$uniqueCustomerCount = count($uniqueCustomers);ポイント:array_column と組み合わせると、業務データ処理に強力。
③ リポジトリ層:SQL生成前のデータ整形
検索条件で「同じIDが重複して渡ってきた場合」に無駄なWHERE句を防ぐ。
public function findByIds(array $ids)
{
$ids = array_unique($ids);
return User::whereIn('id', $ids)->get();
}ポイント:
データベースアクセスを最適化できる。
Laravelでも「whereIn」に渡す配列は重複を消すのが定石。
④ 集計・レポートフェーズ:ユニーク件数を算出
たとえばアクセスログのように「同一ユーザーが複数回アクセスしても、ユニークユーザー数を出したい」ケース。
$logs = [
['user_id' => 1, 'path' => '/home'],
['user_id' => 1, 'path' => '/dashboard'],
['user_id' => 2, 'path' => '/home'],
];
$userIds = array_column($logs, 'user_id');
$uniqueUserCount = count(array_unique($userIds));
echo "ユニークユーザー数: {$uniqueUserCount}";
// 出力: ユニークユーザー数: 2ポイント:
BIツール連携やCSV出力前にサーバー側でユニーク化する処理に便利。
⑤ その他:複数マスタのマージ後にユニーク化
たとえば複数マスタを統合する場合、同じIDやコードが重複することがあります。
$codesA = ['A100', 'A200', 'A300'];
$codesB = ['A200', 'A400'];
$merged = array_merge($codesA, $codesB);
$uniqueCodes = array_unique($merged);
print_r($uniqueCodes);
// => ['A100', 'A200', 'A300', 'A400']ポイント:array_merge → array_unique は定番の組み合わせ。
※array_mergeについては、こちらの記事でも紹介しています。
まとめ
| 利用フェーズ | 使用目的 | 関連関数の組み合わせ例 |
|---|---|---|
| バリデーション | 入力の重複除去 | array_unique() |
| サービス層 | ユニークな顧客やIDの集計 | array_column() + array_unique() |
| リポジトリ | SQL条件の最適化 | array_unique() + whereIn() |
| 集計 | ユニーク件数算出 | array_unique() + count() |
| データ整形 | マスタ統合後の重複削除 | array_merge() + array_unique() |
array_unique() は、配列操作の中でも「安全・シンプル・効果的」な関数のひとつです。
一度処理した配列を再利用する前に、
「念のため重複を削除しておこう」と考える習慣をつけるだけで、
思わぬバグを防ぐことができます。

