現在の位置: ホーム> 最新記事一覧> array_diff()およびarray_filter()は、より複雑なフィルタリングロジックを共同で実装します

array_diff()およびarray_filter()は、より複雑なフィルタリングロジックを共同で実装します

M66 2025-05-14

毎日のPHP開発では、フィルタリングアレイは非常に一般的なタスクです。無効なデータのクリーンアップ、特定の要素の削除、またはビジネスロジックフィルタリングの実行など、 array_filter()array_diff()などの関数を使用する場合があります。それらだけを使用することはすでに強力ですが、それらを組み合わせると、より複雑で柔軟なアレイ操作を実装できます。

この記事では、例を使用して、 array_diff()array_filter()を組み合わせて複雑な配列フィルタリングロジックを実装する方法を説明します。

1。基本的なレビュー

array_filter()

array_filter()は通常、コールバック関数に基づいて基準を満たさない配列の値をフィルタリングするために使用されます。

 $numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, function($n) {
    return $n % 2 === 0;
});
// $even = [1 => 2, 3 => 4]

array_diff()

array_diff()は、他の配列ではない配列内のすべての値を返すために使用されます。

 $all = ['apple', 'banana', 'cherry'];
$remove = ['banana'];
$result = array_diff($all, $remove);
// $result = [0 => 'apple', 2 => 'cherry']

2。問題のシナリオ

複数のユーザー入力を含むデータがあるとします。これには、除外する値(ブラックリスト、既存のアイテム、無効なデータなど)を含むいくつかの値を含みます。あなたが願っています:

  • array_filter()を使用して、無効または誤ってフォーマットされたアイテムを除外します。

  • 次に、 array_diff()を使用して、ブラックリスト内のこれらの値を削除します。

  • 最後に、さらなる処理に使用できるクリーンな配列。

3.実用的な例

ユーザーがサビされたURLのバッチを収集するとします。

  1. null値または誤った形式を削除します。

  2. ブラックリストから除外されたドメイン名。

 $userUrls = [
    'https://m66.net/article/123',
    'http://example.com/test',
    '',
    'not_a_url',
    'https://m66.net/login',
    'https://blacklist.com/malicious',
];

$blacklistedDomains = ['blacklist.com'];

// 最初のステップ:使用 array_filter() 無効なクリアランス URL
$validUrls = array_filter($userUrls, function($url) {
    return filter_var($url, FILTER_VALIDATE_URL);
});

// ステップ2:抽出は合法です URL ドメイン名,ブラックリストドメイン名を除外します
$filteredUrls = array_filter($validUrls, function($url) use ($blacklistedDomains) {
    $host = parse_url($url, PHP_URL_HOST);
    return !in_array($host, $blacklistedDomains);
});

// $filteredUrls 現在、法のであり、ブラックリストに載っていません URL
print_r($filteredUrls);

出力の結果は次のとおりです。

 Array
(
    [0] => https://m66.net/article/123
    [1] => http://example.com/test
    [4] => https://m66.net/login
)

ここでは実際にArray_filter()を2回使用したことに注意してください。また、以下に示すように、ドメイン名リスト間の違いを処理するために必要に応じてarray_diff()を導入することもできます。

4。array_diff()と組み合わせて、ブラックリストを正確に除外します

最初にURLからすべてのドメイン名を抽出し、次にarray_diff()を使用してブラックリストドメイン名を除外できます。

 $domains = array_map(function($url) {
    return parse_url($url, PHP_URL_HOST);
}, $validUrls);

$allowedDomains = array_diff($domains, $blacklistedDomains);

// もう一度フィルターします URL,持ち物のみを保持します allowedDomains の
$finalUrls = array_filter($validUrls, function($url) use ($allowedDomains) {
    $host = parse_url($url, PHP_URL_HOST);
    return in_array($host, $allowedDomains);
});

print_r($finalUrls);

5。概要

array_filter()array_diff()を組み合わせることにより、さまざまな複雑な配列フィルタリングロジックを非常に柔軟に処理できます。実際の開発:

  • array_filter()は、条件に応じて、配列要素を1つずつチェックするのに適しています。

  • array_diff()は、既知の無効なアイテムまたはブラックリストを除外するのに適しています。

  • 2つを組み合わせることで、要素コンテンツを検証するだけでなく、セットフィルタリングも実現できます。

これらの機能の組み合わせを柔軟に習得すると、PHPのデータアレイの効率とコードの読みやすさが大幅に向上します。