ArrayをPHPで処理する場合、2つの非常に実用的な関数がよく使用されます: array_change_key_case()とarray_filter() 。これらの2つの関数は合計に使用されます。多くの開発者は、これら2つの機能を使用する際に尋ねることができます。これら2つの関数の呼び出し順序は重要ですか?最終処理結果に影響しますか?
この記事では、分析と例を通じてこの質問に答えます。
この関数は、配列のキー名をすべての小文字またはすべての大文字に変換するために使用され、次のように使用されます。
array_change_key_case(array $array, int $case = CASE_LOWER): array
$ caseはcase_lower (デフォルト)またはcase_upperにすることができます。
例:
$arr = ['Name' => 'Tom', 'Age' => 25];
print_r(array_change_key_case($arr, CASE_LOWER));
// 出力:Array ( [name] => Tom [age] => 25 )
この関数は、配列内の要素をフィルタリングするために使用され、コールバック関数をカスタマイズして、どの要素を保持するかを決定できます。
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
デフォルトでは、 false 、 null 、 0 、空の文字列などの「false値」で要素を削除します。
例:
$arr = ['name' => 'Tom', 'age' => 0, 'email' => ''];
print_r(array_filter($arr));
// 出力:Array ( [name] => Tom )
はい、順序は、あなたが扱っている特定の配列構造と目的に応じて、結果に影響を与える可能性があります。
この場合、キーケースが最初に変換され、次に値がフィルタリングされます。
$data = ['Name' => 'Tom', 'Age' => null, 'EMAIL' => ''];
$result = array_filter(array_change_key_case($data));
print_r($result);
出力:
Array ( [name] => Tom )
説明:
キーはすべて小文字です:名前、年齢、電子メール
ヌルと空の文字列が削除されます
$data = ['Name' => 'Tom', 'Age' => null, 'EMAIL' => ''];
$result = array_change_key_case(array_filter($data));
print_r($result);
出力:
Array ( [name] => Tom )
出力は同じように見えますが、コールバック関数でarray_filter()を使用すると、違いが発生する可能性があります。
$data = ['Name' => 'Tom', 'Age' => 0, 'EMAIL' => 'tom@m66.net'];
$result1 = array_filter(array_change_key_case($data), function($val) {
return !empty($val);
});
$result2 = array_change_key_case(array_filter($data, function($val) {
return !empty($val);
}));
print_r($result1);
print_r($result2);
出力:
$result1:
Array ( [name] => Tom [email] => tom@m66.net )
$result2:
Array ( [name] => Tom [email] => tom@m66.net )
現時点では結果はまだ同じですが、キー名の上限と小文字に基づいてさらに論理的な処理を行う必要がある場合、順序は判断の論理に影響を与える可能性があります。
ニーズに基づいて判断することをお勧めします。
キーの形式を均一に処理したい場合(すべての小文字を変換してケースの混乱を避けるなど)、 array_change_key_case()を最初に使用できます。
配列値のフィルタリングロジックにもっと注意を払い、キー名の形式を気にしない場合、最初にarray_filter()を使用するかどうかは関係ありません。
両方を使用する必要がある場合、不確実な論理エラーを避けるために、シーケンスの順序を明確に定義することが最善です。