PHP開発では、アレイ操作が毎日の作業で最も一般的なリンクです。私たちはほぼ毎日「クリーニングアレイ」をやっています。ユーザーが送信したフォームデータの処理であろうと、インターフェイスで返されたデータのクリーンアップであろうと、最も一般的なニーズの1つはです。
幸いなことに、PHPは非常にエレガントな方法を提供します: array_filter() 。この記事では、この機能の使用について深く理解し、いくつかの実用的なヒントを共有して、アレイの空の要素を効率的かつ柔軟にフィルタリングするのに役立ちます。
php array_filter()のデフォルトの動作は、次を含む、配列に値「false」の要素を削除することです。
空の文字列''
番号0と文字列「0」
ヌル
間違い
空の配列[]
最も簡単な例を見てみましょう。
$data = ['apple', '', null, 'banana', 0, '0', false];
$filtered = array_filter($data);
print_r($filtered);
出力の結果は次のとおりです。
Array
(
[0] => apple
[3] => banana
)
array_filter()は、デフォルトで「コンテンツがないように見える」すべての値を削除することがわかります。この使用法は、ほとんどのシナリオで十分です。
「0」または0をフィルタリングしたくない場合は、コールバック関数をカスタマイズできます。Array_Filter ()は、 nullや''など、「空」だと思う値のみを除外します。
$data = ['title' => '', 'price' => 0, 'available' => false, 'sku' => '0', 'description' => null];
$filtered = array_filter($data, function($value) {
return !is_null($value) && $value !== '';
});
print_r($filtered);
出力:
Array
(
[price] => 0
[available] =>
[sku] => 0
)
この方法は、ユーザーフォームデータまたは構成アイテムの処理に特に適しており、意味のある「ゼロ値」を誤って削除することはありません。
POSTリクエストを介してユーザーが入力したデータをAPIに送信すると、null値を渡したくないとします。
$formData = [
'name' => 'チャン・サン',
'email' => '',
'phone' => null,
'age' => 25
];
$cleanData = array_filter($formData, function($val) {
return !is_null($val) && $val !== '';
});
$apiUrl = 'https://api.m66.net/user/submit';
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($cleanData),
]
];
$context = stream_context_create($options);
$result = file_get_contents($apiUrl, false, $context);
echo $result;
このようにして、有効なデータを送信して、APIに役に立たないフィールドの束を受け取らせないようにします。
フロントエンドから提出されたネストされたフォームなど、アレイが多次元である場合は、再帰的にクリーンアップする必要があります。
function recursive_filter(array $input) {
foreach ($input as $key => &$value) {
if (is_array($value)) {
$value = recursive_filter($value);
}
}
return array_filter($input, function($val) {
return $val !== '' && !is_null($val);
});
}
$data = [
'user' => [
'name' => 'li si',
'email' => '',
'tags' => ['', null, 'developer']
],
'status' => null
];
$cleaned = recursive_filter($data);
print_r($cleaned);
この方法で処理した後、配列はきれいになり、空の値を見逃したり、有効なコンテンツを誤って削除したりしません。
上記のケースを通して、私たちは見ることができます:
array_filter()のデフォルトの動作はすでに非常に強力であり、さまざまな「偽の値」をすばやく削除します。
カスタムコールバックを使用すると、フィルタリングを正確に制御できます。
複雑な構造に対処する場合、再帰的な方法で簡単に対処できます。
実際の開発では、フォームデータ、インターフェイス要求パラメーター、さらにはデータベースの作成前にデータフィルタリングをクリーニングするために使用できます。
要するに、この関数を使用するほど、データはクリーナーになり、コードがよりエレガントになります!
関連タグ:
array_filter