• 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_mergearray_unique は定番の組み合わせ。

array_mergeについては、こちらの記事でも紹介しています。

まとめ

利用フェーズ使用目的関連関数の組み合わせ例
バリデーション入力の重複除去array_unique()
サービス層ユニークな顧客やIDの集計array_column() + array_unique()
リポジトリSQL条件の最適化array_unique() + whereIn()
集計ユニーク件数算出array_unique() + count()
データ整形マスタ統合後の重複削除array_merge() + array_unique()

array_unique() は、配列操作の中でも「安全・シンプル・効果的」な関数のひとつです。
一度処理した配列を再利用する前に、
「念のため重複を削除しておこう」と考える習慣をつけるだけで、
思わぬバグを防ぐことができます。