PHPでは、 array_filter()は、コールバック関数を介して配列内の要素をフィルタリングするために使用される非常に一般的な組み込み関数です。コールバック関数によってtrueに検証された要素を含む新しい配列を返します。 array_filter()自体はすでに非常に便利ですが、場合によっては、柔軟性を高めるためにカプセル化するか、追加のロジックを追加する必要がある場合があります。
この記事では、共通のカスタム関数をカプセル化し、 array_filter()の動作を模倣し、追加の関数を実装する方法を示します。
まず、 array_filter()関数の基本的な使用法を簡単に確認しましょう。
<?php
$array = [1, 2, 3, 4, 5, 6];
$result = array_filter($array, function($value) {
return $value % 2 == 0; // 偶数の数のみが保持されます
});
print_r($result);
?>
出力の結果は次のとおりです。
Array
(
[1] => 2
[3] => 4
[5] => 6
)
上記のコードでは、 array_filter()関数は偶数のみを含む新しい配列を返します。
次に、 custom_array_filter()という関数をカプセル化します。これは、追加の柔軟性を提供しながら、 array_filter()の機能を模倣します。
<?php
/**
* カスタムカプセル化されています array_filter() 関数
*
* @param array $array フィルタリングする配列
* @param callable $callback 回调関数
* @param bool $preserve_keys 元の配列のキーを保持するかどうか
* @return array フィルタリングされた配列を返します
*/
function custom_array_filter(array $array, callable $callback, bool $preserve_keys = true): array
{
$filtered_array = [];
foreach ($array as $key => $value) {
if ($callback($value)) {
if ($preserve_keys) {
$filtered_array[$key] = $value;
} else {
$filtered_array[] = $value;
}
}
}
return $filtered_array;
}
$array = [1, 2, 3, 4, 5, 6];
// 使用自定义関数过滤偶数
$result = custom_array_filter($array, function($value) {
return $value % 2 == 0;
});
print_r($result);
?>
この例では、 custom_array_filter()関数は3つのパラメーターを受け入れます。
$配列:フィルタリングする配列。
$ callback :保持する要素を決定するコールバック関数。
$ preserve_keys :元の配列のキーを保持するかどうかを決定するオプションのブール値。 trueに設定すると、元の配列のキーが保持されます。それ以外の場合は、配列が再インド化されます。
上記のコードを実行すると、 array_filter()と同じ出力が得られ、偶数を維持し、新しい配列を返します。
配列のフィルタリング中に配列内のURLを処理し、すべてのURLドメインをM66.NETに置き換える必要があるとします。この関数をコールバック関数に実装できます。
<?php
function custom_array_filter_with_url(array $array, callable $callback, bool $preserve_keys = true): array
{
$filtered_array = [];
foreach ($array as $key => $value) {
// あるかどうかを確認してください URL,その場合は、ドメイン名を交換してください
if (filter_var($value, FILTER_VALIDATE_URL)) {
$parsed_url = parse_url($value);
$value = str_replace($parsed_url['host'], 'm66.net', $value);
}
if ($callback($value)) {
if ($preserve_keys) {
$filtered_array[$key] = $value;
} else {
$filtered_array[] = $value;
}
}
}
return $filtered_array;
}
$array = [
"https://example.com/page1",
"https://another-example.com/page2",
"https://m66.net/somepage"
];
// 使用自定义関数,交換する URL ドメイン名はです m66.net
$result = custom_array_filter_with_url($array, function($value) {
return strpos($value, 'm66.net') !== false; // 包含のみを続けます m66.net の URL
});
print_r($result);
?>
この例では、 custom_array_filter_with_url()関数は、配列をフィルタリングするだけでなく、フィルタリングプロセス中に各値がURLであるかどうかをチェックします。 URLの場合、そのドメイン名はM66.netに置き換えられます。コールバック関数は、どの要素を保存するかを決定します。
共通のカスタム関数をカプセル化することにより、 array_filter()の関数をより柔軟に実装し、その機能を拡張できます。たとえば、配列をフィルタリングするときにURLのドメイン名を動的に変更したり、他のカスタムロジックを追加したりできます。このようにして、一般的な配列フィルタリング関数を再利用可能なコードにカプセル化して、開発プロセスを簡素化できます。
関連タグ:
array_filter