毎日のPHP開発では、フィルタリングアレイは非常に一般的なタスクです。無効なデータのクリーンアップ、特定の要素の削除、またはビジネスロジックフィルタリングの実行など、 array_filter()やarray_diff()などの関数を使用する場合があります。それらだけを使用することはすでに強力ですが、それらを組み合わせると、より複雑で柔軟なアレイ操作を実装できます。
この記事では、例を使用して、 array_diff()と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()は、他の配列ではない配列内のすべての値を返すために使用されます。
$all = ['apple', 'banana', 'cherry'];
$remove = ['banana'];
$result = array_diff($all, $remove);
// $result = [0 => 'apple', 2 => 'cherry']
複数のユーザー入力を含むデータがあるとします。これには、除外する値(ブラックリスト、既存のアイテム、無効なデータなど)を含むいくつかの値を含みます。あなたが願っています:
array_filter()を使用して、無効または誤ってフォーマットされたアイテムを除外します。
次に、 array_diff()を使用して、ブラックリスト内のこれらの値を削除します。
最後に、さらなる処理に使用できるクリーンな配列。
ユーザーがサビされたURLのバッチを収集するとします。
null値または誤った形式を削除します。
ブラックリストから除外されたドメイン名。
$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()を導入することもできます。
最初に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);
array_filter()とarray_diff()を組み合わせることにより、さまざまな複雑な配列フィルタリングロジックを非常に柔軟に処理できます。実際の開発:
array_filter()は、条件に応じて、配列要素を1つずつチェックするのに適しています。
array_diff()は、既知の無効なアイテムまたはブラックリストを除外するのに適しています。
2つを組み合わせることで、要素コンテンツを検証するだけでなく、セットフィルタリングも実現できます。
これらの機能の組み合わせを柔軟に習得すると、PHPのデータアレイの効率とコードの読みやすさが大幅に向上します。