array_filter()は、PHPで一般的に使用される関数の1つであり、配列内の要素をフィルタリングするために使用されます。通常、 array_filter()は基準を満たす配列値のみを返し、デフォルトで配列のキー名をリセットします。つまり、0からの連続整数キー名を保持しますが、アレイをフィルタリングするときに元のキー名を保持できる場合があります。この記事では、array_filter()を使用するときに配列のキー名を保存する方法について説明します。
キー名を保持する方法を議論する前に、まずarray_filter()の基本的な使用法を見てみましょう。 array_filter()関数は、配列を繰り返し、コールバック関数の戻り値に基づいて配列内の要素を保持するかどうかを決定します。コールバック関数がtrueを返すと、要素が保持され、それ以外の場合は削除されます。
<?php
$array = [1, 2, 3, 4, 5];
$result = array_filter($array, function($value) {
return $value % 2 === 0; // 偶数の数のみが保持されます
});
print_r($result);
?>
出力結果:
Array
(
[1] => 2
[3] => 4
)
上記のように、 array_filter()は配列をフィルターしますが、キー名をリセットします。この例では、 array_filter()の出力配列キー名は0から始まり、元の配列のキー名を保持します。
PHPは、 array_filter()の3番目のパラメーターArray_filter_use_keyを使用して、一般的なソリューションを提供します。この定数を使用する場合、 array_filter()は、値の代わりにキー名に基づいてコールバック関数を実行するため、フィルタリング時にキー名を保存できます。
<?php
$array = [1 => 10, 2 => 20, 3 => 30, 4 => 40, 5 => 50];
$result = array_filter($array, function($key) {
return $key % 2 === 0; // キーを均一に保ちます
}, ARRAY_FILTER_USE_KEY);
print_r($result);
?>
出力結果:
Array
(
[2] => 20
[4] => 40
)
この例では、 array_filter_use_keyを使用して、コールバック関数のパラメーターが値ではなく配列のキーになるようにします。このようにして、元のキー名を保持しながら、キー名の条件に基づいて配列をフィルタリングできます。
複数のURLアドレスを含む配列があるとしたら、 M66.NETドメイン名を含むアドレスをフィルタリングし、元のキー名を保持する必要があります。
<?php
$urls = [
'a' => 'http://example.com/page1',
'b' => 'https://m66.net/page2',
'c' => 'http://m66.net/page3',
'd' => 'https://example.com/page4',
];
$result = array_filter($urls, function($url) {
return strpos($url, 'm66.net') !== false; // インクルージョンを除外します m66.net の URL
});
print_r($result);
?>
出力結果:
Array
(
[b] => https://m66.net/page2
[c] => http://m66.net/page3
)
上記のように、 array_filter()は、 m66.netを含むURLアドレスをフィルターし、キー名( BおよびC )を保持します。
array_filter()関数は非常に強力で、配列のフィルタリングに使用できますが、デフォルトでは、配列のキー名がリセットされます。配列のキー名を保持する場合は、 array_filter()を使用するときにarray_filter_use_keyの定数を指定するだけで、コールバック関数は値だけでなく配列のキーを受け入れます。
このようにして、キー名または値の条件に応じて配列を柔軟にフィルタリングし、元のキー名を保持して、配列の構造をそのままに保つことができます。