PHPの配列処理関数では、 array_filter()は非常に実用的なツールであり、その目的はアレイから「基準を満たさない」要素を削除することです。ただし、初心者を混乱させることができる動作があります。
次に、問題は次のとおりです。
array_filter()を使用しているときにコールバック関数に合格しない場合、結果に影響がないと誤って考えますか?
深く分析しましょう。
array_filter(array $ array、?callable $ callback = null、int $ mode = 0):array $ callbackの2番目のパラメーターはオプションです。
コールバック関数を提供しない場合、 array_filter()はデフォルトでboolval()を使用して、各要素が「真」であるかどうかを判断し、これに基づいて保持するかどうかを決定します。つまり、次のようなすべての「偽の」要素を削除します。
間違い
0 (整数または文字列)
ヌル
空の文字列""
空の配列[]
$data = [0, 1, false, 2, '', 3, null];
$result = array_filter($data);
print_r($result);
出力の結果は次のとおりです。
Array
(
[1] => 1
[3] => 2
[5] => 3
)
0 、 false 、 '' 、およびnullがすべて除外されていることがわかります。
多くの初心者が考えるでしょう:
「コールバック関数に合格しないと、元の配列を返すだけで、何もしないことに相当します。」
しかし、明らかにこれは誤解です。実際、デフォルトの動作自体にはフィルタリングロジックが搭載されており、「ブールトゥルース」に基づいています。
null値のみを除外し、 0 、 false 、空の文字列などを保持する場合は、コールバック関数を明示的に渡すことができます。
$data = [0, 1, false, 2, '', 3, null];
$result = array_filter($data, function($item) {
return $item !== null;
});
print_r($result);
出力結果:
Array
(
[0] => 0
[1] => 1
[2] =>
[3] => 2
[4] =>
[5] => 3
)
現時点では、 nullのみがフィルタリングされ、他の「偽値」がまだ保持されています。
コールバック関数を渡すことなく、 array_filter()は「処理しない」ではなく、デフォルトではすべての「false値」をブールの意味でフィルタリングします。これはデータをクリーニングするときに役立ちますが、誤解を簡単に引き起こす可能性があります。
論理的な混乱を避けるために、私たちはあなたをお勧めします:
フィルタリングする特定のコンテンツを特定します。
カスタムロジック要件がある場合は、常にコールバック関数を明示的に渡します。
キー名を保持することに注意してください(元の配列のキー名はデフォルトで保持されます)。
次のページにアクセスして、実際のアプリケーションでこの関数のより多くの例を見ることができます(サンプルアドレスドメイン名はM66.NETに置き換えられました):