現在の位置: ホーム> 最新記事一覧> array_filter()はいつ回避する必要がありますか?

array_filter()はいつ回避する必要がありますか?

M66 2025-06-03

PHPでは、 array_filter()は、配列から「空の」値を削除するか、コールバック関数を使用して複雑なフィルタリングを実行できる非常に実用的な関数です。ただし、すべてのシナリオで最良の選択ではありません。場合によっては、 array_filter()を使用すると、パフォーマンスの問題、混乱したコードロジック、さらには結果のエラーが発生する可能性があります。 Array_filter()の使用を避ける必要がある状況で説明しましょう。

1.配列のキーを気にするとき

array_filter()は、デフォルトで元の配列のキー名を保持しますが、再インネックスされません。 0から継続的に増加するインデックス配列が期待される場合、 array_filter()を使用すると、あなたを失望させる可能性があります。例えば:

 $data = [0 => 'A', 1 => '', 2 => 'B'];
$result = array_filter($data);

print_r($result);

出力は次のとおりです。

 Array
(
    [0] => A
    [2] => B
)

この時点でjson_encodeでフロントエンドに渡そうとする場合、またはインデックスのある要素にアクセスしようとすると、問題が発生する可能性があります。この時点で、array_values(array_filter(...))を使用するか、自分で処理するためにforeachを使用することを検討する必要があります。

2。値をfalseに等しく保つ必要がある場合

array_filter()は、デフォルト(false、0、null ''、[]など)ですべての「false値」を削除し、一部のシナリオでデータの整合性を破壊します。例えば:

 $data = [0, 1, 2, false];
$result = array_filter($data);
print_r($result);

出力は次のとおりです。

 Array
(
    [1] => 1
    [2] => 2
)

false0の両方が削除されますが、これらの値があなたに意味がある場合、たとえば、ユーザーの投票(0は異議を唱えることを意味します)をカウントしている場合、これは受け入れられません。

解決策は、カスタムコールバック関数に合格することです。

 $result = array_filter($data, function($val) {
    return $val !== null;
});

nullを削除したい場合は、デフォルトの動作に依存しないでください。

3。パフォーマンスが重要な要素になったとき

array_filter()は便利な関数ですが、アレイ全体を通過することで実装されます。これは、大きなデータセットまたは高い並行シナリオで頻繁に呼び出すとパフォーマンスに影響を与える可能性があります。たとえば、数百万のレコードを備えた配列でarray_filter()を繰り返し使用すると、かなりのパフォーマンスが頭上になります。

現時点では、PHPで処理する前に結果が出てくるのを待つのではなく、SQLクエリの不要な値を直接フィルタリングするなど、実際に使用する必要があるかどうか、または他の処理プロセスにマージできるかどうかを検討する必要があります。

4.チェーン操作で混乱が発生する可能性があります

PHPは、チェーンコールを自然にサポートするデータ処理言語ではありません(JavaScriptのマップ/フィルター/削減とは異なります)ため、チェーンコールでarray_filter()を使用すると、論理的な混乱を簡単に引き起こす可能性があります。例えば: