現在の位置: ホーム> 最新記事一覧> array_diff()およびin_array()を使用して、マルチコンディションの除外を実現します

array_diff()およびin_array()を使用して、マルチコンディションの除外を実現します

M66 2025-06-06

毎日の開発では、データフィルタリングは非常に一般的な操作です。特にユーザーの入力を処理する場合、データベースが結果または外部APIデータを返す場合、ブラックリストに登録されたユーザー、資格のない製品、またはデータセットからの処理されたレコードなど、データを「除外」する必要があります。現時点では、2つのPHPネイティブ機能Array_diff()in_array()が役立ちます。

1。array_diff ()の基本的な使用

array_diff()は、アレイの値を比較するために使用され、最初の配列で値を返しますが、他の配列では返されません。例えば:

 $allUsers = ['alice', 'bob', 'charlie', 'david'];
$blacklist = ['bob', 'david'];

$filteredUsers = array_diff($allUsers, $blacklist);

print_r($filteredUsers);
// 出力: ['alice', 'charlie']

この例では、ボブデビッドはブラックリストのメンバーであり、 array_diff()を介して元のデータからそれらを除外します。

2。in_array ()の補助検証

in_array()は、アレイに値が存在するかどうかを判断するために使用されます。この機能は、単一の判断を下すのに非常に役立ちます。

たとえば、データを横断するときに特定のアイテムを条件付きで除外する必要がある場合は、次のように書くことができます。

 $exclusions = ['spam', 'banned'];

$itemType = 'spam';

if (!in_array($itemType, $exclusions)) {
    echo "このアイテムの処理を許可します";
} else {
    echo "このアイテムは除外されています";
}

3。組み合わせの使用:マルチコンディション除外最適化戦略

それでは、より実用的な例、 array_diff()in_array()を組み合わせて、マルチコンディションの除外を達成し、データ処理効率を改善する方法を見てみましょう。

一連の記事データがあり、フィールドに著者、ステータス、タグが含まれているとします。

  1. 脅迫された著者を除外します

  2. ドラフトステータスの記事を除外します

  3. タグに「敏感な」キーワードを含む記事を除外します

これを行うことができます:

 $articles = [
    ['title' => '記事1', 'author' => 'tom', 'status' => 'published', 'tags' => ['php', 'web']],
    ['title' => '記事2', 'author' => 'jack', 'status' => 'draft', 'tags' => ['php', 'センシティブ']],
    ['title' => '記事3', 'author' => 'lucy', 'status' => 'published', 'tags' => ['laravel']],
    ['title' => '記事4', 'author' => 'bob', 'status' => 'published', 'tags' => ['センシティブ']],
];

$blacklistedAuthors = ['bob', 'jack'];
$excludedStatus = ['draft'];
$sensitiveTags = ['センシティブ'];

$filtered = array_filter($articles, function ($article) use ($blacklistedAuthors, $excludedStatus, $sensitiveTags) {
    // ブラックリストの著者を除外します
    if (in_array($article['author'], $blacklistedAuthors)) {
        return false;
    }

    // 特定のステータスを除外します
    if (in_array($article['status'], $excludedStatus)) {
        return false;
    }

    // 排除含有センシティブ标签的記事
    foreach ($article['tags'] as $tag) {
        if (in_array($tag, $sensitiveTags)) {
            return false;
        }
    }

    return true;
});

print_r($filtered);

出力は次のとおりです。

 Array
(
    [0] => Array
        (
            [title] => 記事1
            [author] => tom
            [status] => published
            [tags] => Array
                (
                    [0] => php
                    [1] => web
                )
        )

    [2] => Array
        (
            [title] => 記事3
            [author] => lucy
            [status] => published
            [tags] => Array
                (
                    [0] => laravel
                )
        )
)

4。パフォーマンス最適化の提案

  • データボリュームが大きい場合は、 Array_diff()を使用して、一度に不要なコンテンツを除外し、loop内のin_array()への頻繁な呼び出しを避けてください。

  • 除外の配列構造をハッシュテーブルに調整する(つまり、キー価値ペア形式)を調整すると、検索速度がさらに向上する可能性があります。

例えば:

 $blacklistedAuthors = array_flip(['bob', 'jack']);

if (isset($blacklistedAuthors[$article['author']])) {
    return false;
}

ISSET()のパフォーマンスは、通常、 IN_ARRAY()よりも優れています。特に、同時性の高いシナリオでは。

5。概要

Array_diff()in_array()を合理的に組み合わせることにより、プログラムの読みやすさと実行効率を改善するために、複数の条件下でデータ除外ロジックをすばやく実装できます。実際の開発では、データ構造と論理的判断を合理的に整理することで、コードがより効率的で安定します。