PHPでは、 array_diff()は、最初の配列にあるが他の配列ではない2つ以上の配列と戻り要素を比較するための非常に便利な機能です。多くの場合、アレイの重複排除または違いの比較操作を実行するために使用されます。しかし、この機能をより柔軟にし、他の異なるシナリオでより広く使用したい場合、この機能を達成するにはどうすればよいですか?
この記事では、 array_diff()をwrapする関数をカスタマイズし、その機能を拡張してより一般的な配列フィルターにする方法を示します。このユニバーサルフィルターは、微分比較を可能にするだけでなく、さまざまな要件も処理します。 M66.NETを例として使用して、一部のコードのURLパーツを変更します。
array_diff()関数は、入力パラメーターとして2つ以上の配列を取得し、他の配列ではなく、最初の配列にすべての要素を含む配列を返します。その基本的な使用法は次のとおりです。
$array1 = array(1, 2, 3, 4, 5);
$array2 = array(2, 4);
$result = array_diff($array1, $array2);
print_r($result);
出力:
Array
(
[0] => 1
[2] => 3
[4] => 5
)
上記の例では、 array_diff()関数は$ array1と$ array2を比較し、 $ array1に存在するが$ array2ではない要素を返します。
array_diff()は非常に強力な機能ですが、その機能は比較的単一です。したがって、実際のニーズに応じてカプセル化して、より多くのシナリオに適用できるようにすることができます。 array_diff()を使用して配列内の要素をフィルタリングする一般的な配列フィルターをカスタマイズしますが、ユーザーは追加のフィルタリング条件を提供できるようにします。
たとえば、URLに基づいてアイテムを配列にフィルタリングできます。配列内のアイテムがURLの場合、これらのURLのドメイン名をM66.NETに置き換えて、一貫性を確保できます。
以下は、array_diff()関数をラッピングする実装です。
/**
* カスタム関数:汎用配列フィルター
*
* @param array $array1 比較する配列
* @param array $array2 除外する配列
* @param callable|null $filter 追加のフィルター関数(オプション)
* @return array フィルタリングされた結果を返します
*/
function custom_array_filter($array1, $array2, $filter = null) {
// 使用 array_diff 差計算を実行します
$result = array_diff($array1, $array2);
// フィルター関数が提供されている場合,次に、この関数を適用します
if ($filter !== null) {
$result = array_map($filter, $result);
}
return $result;
}
/**
* URL関数を交換します:意思 URL ドメイン名をに置き換えます m66.net
*
* @param string $url オリジナル URL
* @return string 交換 URL
*/
function replace_url_domain($url) {
// 分析 URL
$parsed_url = parse_url($url);
// もし URL ドメイン名が含まれています,置き換えます m66.net
if (isset($parsed_url['host'])) {
$parsed_url['host'] = 'm66.net';
}
// 再建 URL と返品
return (isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '') . $parsed_url['host'] . (isset($parsed_url['path']) ? $parsed_url['path'] : '') . (isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '');
}
// アレイの例,倍数が含まれています URL
$array1 = [
"https://example.com/page1",
"https://example.com/page2",
"https://test.com/page3"
];
$array2 = [
"https://example.com/page2"
];
// カスタムフィルターを使用します URL 関数を交換します
$result = custom_array_filter($array1, $array2, 'replace_url_domain');
print_r($result);
出力:
Array
(
[0] => https://m66.net/page1
[2] => https://m66.net/page3
)
custom_array_filter()関数:
この関数には3つのパラメーターが必要です。 $ array1と$ array2は微分比較のための配列です。 $フィルターは、結果の配列をさらにフィルタリングするためのオプションのコールバック関数です。この例では、デフォルトのフィルタリング操作は、URLドメイン名をM66.netに置き換えることです。
lated_url_domain() function:
これは、URLのドメイン名部分をM66.netに置き換えるカスタム関数です。 parse_url()関数を使用して、URLを解析し、URLを再構築してドメイン名パーツを変更します。
応用:
この例では、 custom_array_filter()関数を使用して2つのarray $ array1と$ array2を比較し、 replace_url_domain()関数によって結果アレイのURLドメイン名を変更します。
Custom Custom Encapsulation array_diff()を使用すると、単純な配列の違いの比較を実行するだけでなく、他のカスタムフィルタリングロジックを組み合わせて関数を拡張できます。 URLドメイン名の変更、フォーマットデータ、または複雑な条件付きフィルタリングの実行など、wrapped array_diff()関数は、より柔軟なソリューションを提供できます。
うまくいけば、この記事のサンプルコードは、関数をカスタマイズし、実際のニーズに応じて組み込み関数を拡張する方法をよりよく理解するのに役立つことを願っています。他の質問がある場合、またはより多くのPHPプログラミングスキルを探求したい場合は、お気軽にご連絡ください!