Web開発プロセス中に、特定の条件を満たすアイテムのみが保持されるように、フォームで送信されたデータをフィルタリングする必要があることがよくあります。 PHPは非常に便利な関数Array_Filter()を提供します。これは、配列のnull値を削除するために使用できるだけでなく、コールバック関数をカスタマイズして、より複雑なフィルタリングロジックを実装します。
この記事では、array_filter()を使用してフォームで送信されたデータを条件付きでフィルタリングする方法を紹介して、より簡潔で保守可能なPHPコードを作成するのに役立ちます。
array_filter()は、phpによって提供される配列処理機能です。その構文は次のとおりです。
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$配列:フィルタリングする配列。
$ callback :(オプション)フィルター条件を定義するコールバック関数。
$モード:(オプション) array_filter_use_keyまたはarray_filter_use_use_use_use_bothを使用して、コールバック関数パラメーターを指定できます。
コールバック関数が渡されない場合、 array_filter()は、配列( false 、 0 、 "" 、 null 、 []など)にfalseを使用して要素を自動的に削除します。
次のフィールドを提出するユーザー登録フォームがあるとします。
名前
郵便
年
電子メールを購読するかどうか
値が記入されたフィールドをフィルタリングし、18年以上のユーザーデータのみを維持したいと考えています。
$_POST = [
'name' => 'Alice',
'email' => '',
'age' => 17,
'subscribe' => 'yes'
];
// カスタムフィルター基準
$filteredInput = array_filter($_POST, function ($value, $key) {
// 空の値をスキップします
if ($value === '' || $value === null) {
return false;
}
// に対して age フィールドは特定の方法で処理されます
if ($key === 'age') {
return (int)$value > 18;
}
return true;
}, ARRAY_FILTER_USE_BOTH);
print_r($filteredInput);
Array
(
[name] => Alice
[subscribe] => yes
)
ご覧のとおり、電子メールはculされた空の文字列であり、18以下の年齢も除外され、残りは私たちが気にする有効なフィールドです。
この方法を使用して、URLリクエストからパラメーターを取得することもできます。
$_GET = [
'search' => 'PHP',
'page' => '0',
'sort' => null,
'token' => 'abc123'
];
$cleanQuery = array_filter($_GET, function ($value) {
return $value !== '' && $value !== null;
});
$queryString = http_build_query($cleanQuery);
$url = "https://m66.net/search.php?" . $queryString;
echo $url;
https://m66.net/search.php?search=PHP&page=0&token=abc123
「0」のページ値は、 0の判断を明示的に除外し、意味のあるパラメーターを保持するため、フィルタリングされていないことに注意してください。
array_filter()を使用すると、フォーム入力を処理するときにコードロジックを大幅に簡素化でき、特に軽量のデータ検証または前処理に適しています。コールバック関数で使用すると、ほとんどの条件付きフィルタリングのニーズを満たすことができ、PHPで非常に実用的な機能です。
array_filter()は、データ検証のための普遍的なツールではないことに注意する必要があります。より複雑な検証のニーズには、PHPのフィルター拡張機能( filter_var()など)を組み合わせたり、処理に完全な検証フレームワークを使用したりすることをお勧めします。
次回処理時にデータを処理するときに、 Array_filter()を適切に使用して開発効率を向上させることができることを願っています。