PHPでは、 array_filter()関数を使用して、コールバック関数によって配列内の要素をフィルタリングします。これは、指定されたルールを介して配列をフィルタリングし、ルールに一致する要素を残すことを意味します。一部のシナリオでは、さまざまなニーズに応じてフィルタリング条件を柔軟に調整する必要がある場合があるため、フィルタリングルールをパラメーター化して、さまざまなシナリオで再利用および適応できるようにすることが非常に重要になります。
まず、 array_filter()の基本的な使用法を確認しましょう。単純な配列があり、その中に偶数を除外したいとします。
<?php
$array = [1, 2, 3, 4, 5, 6];
$filtered = array_filter($array, function($item) {
return $item % 2 !== 0; // 奇数のみが保持されます
});
print_r($filtered);
?>
実行結果:
Array
(
[0] => 1
[2] => 3
[4] => 5
)
この例では、コールバック関数を介してフィルタリングルールを定義します - 奇数のみが保持されます。ただし、実際のアプリケーションでは、複数の異なるフィルタリングルールが存在する場合があり、毎回新しいコールバック関数を書き込む代わりに、フィルタリングルールを柔軟に選択できるようにしたいと考えています。
フィルタリングルールをより柔軟にするために、フィルタリングルールをパラメーター化して、さまざまなシナリオのニーズに応じて異なるフィルター条件を選択できるようにします。実装の鍵は、 array_filter()にパラメーターとしてフィルタリングルールを渡すことです。
さまざまなシナリオで異なるルールが呼び出されるように、フィルタリングルールを関数またはクラスにカプセル化できます。
<?php
function filterArray(array $array, callable $filterFunction): array {
return array_filter($array, $filterFunction);
}
// さまざまなフィルタリングルールを定義します
$isOdd = function($item) {
return $item % 2 !== 0; // 奇数のみが保持されます
};
$isEven = function($item) {
return $item % 2 === 0; // 偶数の数のみが保持されます
};
$array = [1, 2, 3, 4, 5, 6];
// さまざまなフィルタリングルールを使用します
$filteredOdd = filterArray($array, $isOdd);
$filteredEven = filterArray($array, $isEven);
print_r($filteredOdd); // 奇数のみが保持されます
print_r($filteredEven); // 偶数の数のみが保持されます
?>
出力結果:
Array
(
[0] => 1
[2] => 3
[4] => 5
)
Array
(
[1] => 2
[3] => 4
[5] => 6
)
上記の例では、フィルタリングルールを関数パラメーターを介してFilterArray()に渡すため、さまざまなシナリオでさまざまなルールを柔軟に選択できます。この方法により、コードがより簡潔で再利用可能になります。
一部の外部入力(ユーザー設定、構成ファイルなど)を使用して、フィルタリングルールを動的に決定する場合があります。この場合、合格したパラメーターに基づいて対応するフィルタリングルールを生成できます。
<?php
function generateFilterRule(string $type): callable {
if ($type === 'odd') {
return function($item) {
return $item % 2 !== 0; // 奇数のみが保持されます
};
} elseif ($type === 'even') {
return function($item) {
return $item % 2 === 0; // 偶数の数のみが保持されます
};
} else {
return function($item) {
return true; // フィルタリングなし
};
}
}
$array = [1, 2, 3, 4, 5, 6];
$filterRule = generateFilterRule('odd'); // 奇妙なルールを選択します
$filtered = array_filter($array, $filterRule);
print_r($filtered);
?>
出力結果:
Array
(
[0] => 1
[2] => 3
[4] => 5
)
この例では、 GenerateFilterrule()関数は、通過した文字列に基づいてフィルタリングルールを決定し、フィルタリング条件をより柔軟にします。
実際の開発では、フィルタリングルールは、外部のデータソース(データベースクエリの結果、API戻り値など)に依存することがあります。この場合、外部データソースをフィルタリングルールに組み込むことができます。たとえば、 M66.netから取得した構成に基づいて、フィルタリングルールを動的に生成できます。
<?php
// これがからであると仮定します m66.net 取得したフィルタールール構成
$filterConfig = [
'type' => 'even' // ここで外部インターフェイスから取得した値は 'odd' または 'even'
];
// 外部データソースに基づいてフィルタリングルールを生成します
$filterRule = generateFilterRule($filterConfig['type']);
$array = [1, 2, 3, 4, 5, 6];
$filtered = array_filter($array, $filterRule);
print_r($filtered);
?>
このようにして、 M66.NETなどの外部インターフェイスの構成に従ってフィルタリングルールを動的に調整して、コードがさまざまなニーズに適応できるようにすることができます。