PHPでは、 array_filter()関数は、配列内の要素をフィルタリングするために使用される一般的な配列処理ツールです。 array_filter()関数は、コールバック関数と配列をパラメーターとして受け入れ、コールバック関数条件を満たすすべての要素を含む新しい配列を返します。
デフォルトでは、 array_filter()は、フィルタリングされた配列のキー名(添え字)を保持します。ただし、多くの開発者は、キー名が保持されていないか、使用すると予期しない状況が発生する可能性があることがわかります。それでは、なぜこの現象が発生するのでしょうか?
array_filter()の基本機能は、コールバック関数の返品値に基づいて保持される要素を決定することです。 trueを返す要素は保持されますが、 falseを返す要素は削除されます。その構文は次のとおりです。
array_filter(array $array, callable $callback = null, int $mode = 0): array
$配列:フィルタリングする配列。
$ callback :フィルタリングのコールバック関数。省略した場合、空でないすべての値はデフォルトで保持されます。
$モード:配列のインデックス作成方法を制御できるオプションのパラメーター、通常はarray_filter_use_keyまたはarray_filter_use_use_both 。
array_filter()を呼び出すと、配列要素の元のキー名が保持されます。たとえば、次の例を考えてみましょう。
$input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
return strlen($value) > 5;
});
print_r($result);
出力は次のとおりです。
Array
(
[1] => orange
[2] => banana
)
ご覧のとおり、元のキー名(1および2)が保存されています。
ただし、場合によっては、 array_filter()がキー名を保持していないことがわかった場合、通常、 array_filter_use_keyまたはarray_filter_use_use_use_bothモードが使用されるか、コールバック関数が異なる値を返します。
この例を見てみましょう。
$input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($key) {
return $key > 0;
}, ARRAY_FILTER_USE_KEY);
print_r($result);
このコードは出力されます:
Array
(
[1] => orange
[2] => banana
)
ここでは、 array_filter_use_keyパターンを使用しますが、実際の要素の値ではなくキー値をフィルタリングするため、キー名はまだ保存されています。
array_filter()は、配列のキーを変更せずに、デフォルトでアレイの値のみをフィルターします。 array_filter_use_keyまたはarray_filter_use_use_bothを使用する場合、キー名が再計算またはリセットされる場合があります。これは、特に異なるフィルタリングモードを使用する場合、PHPの内部処理ロジックによるものです。リターン値は、キー名の保持に影響する可能性があります。
フィルタリングされた配列が連続したキー名を再生したい場合は、 array_values()を使用してインデックスを再構築できます。
$input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
return strlen($value) > 5;
});
$result = array_values($result);
print_r($result);
出力:
Array
(
[0] => orange
[1] => banana
)
ご覧のとおり、 array_values()を使用した後、配列キーが再インネックスされているため、0からのキー名が連続しています。
array_filter()はデフォルトでキー名を保持しますが、特にarray_filter_use_keyまたはarray_filter_use_use_use_use_use_use_use_bothを使用する場合、特定のモードでキー名が発生する場合があります。キー名をリセットする必要がある場合は、 array_values()で解決できます。
この記事がarray_filter()の動作を理解するのに役立つことを願っています!
関連タグ:
array_filter