PHPでは、 array_change_key_case()は、配列のキー名をすべての小文字またはすべての大文字に迅速に変換する非常に実用的な関数であり、特に外部データ(APIリターンなど)を処理する場合、データ形式を統合するためによく使用されます。ただし、この関数はstdclassオブジェクトで直接使用できますか?この記事では、この問題を一緒に探索します。
array_change_key_case()は配列を取得し、すべてのキー名を小文字または大文字に変換します。
$data = [
"Name" => "Alice",
"AGE" => 25
];
$lowercase = array_change_key_case($data, CASE_LOWER);
print_r($lowercase);
出力結果:
Array
(
[name] => Alice
[age] => 25
)
PHPでは、 STDCLASSは最も一般的に使用される匿名オブジェクトタイプです。たとえば、 JSON_DECODE()を介してJSON文字列をデコードすると、2番目のパラメーターがtrueに渡されない場合、 STDClassオブジェクトはデフォルトで返されます。
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
print_r($obj);
出力の結果は次のとおりです。
stdClass Object
(
[Name] => Alice
[AGE] => 25
)
答えは次のとおりです。直接使用できません。 array_change_key_case()は、Arraysのみを入力パラメーターとして受け入れます。 STDCLASSオブジェクトを渡そうとすると、警告またはエラーが表示されます。
例:
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
$result = array_change_key_case($obj, CASE_LOWER);
出力:
Warning: array_change_key_case() expects parameter 1 to be array, object given
したがって、最初にオブジェクトを配列に変換してから、関数を使用する必要があります。
型変換またはget_object_vars()を使用して、 stdclassを配列に変換できます。
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
// 方法 1:タイプ変換
$arr = (array) $obj;
// 方法 2:get_object_vars()
$arr2 = get_object_vars($obj);
// 使用 array_change_key_case
$lowercase = array_change_key_case($arr, CASE_LOWER);
print_r($lowercase);
出力:
Array
(
[name] => Alice
[age] => 25
)
最終結果をオブジェクトに変換する必要がある場合は、これを行うことができます。
$lower_obj = (object) $lowercase;
print_r($lower_obj);
結果:
stdClass Object
(
[name] => Alice
[age] => 25
)
インターフェイスからユーザーデータを取得するとします(たとえばhttps://api.m66.net/user/info ):
$response = file_get_contents('https://api.m66.net/user/info');
$data = json_decode($response); // デフォルトはです stdClass
$normalized = array_change_key_case((array) $data, CASE_LOWER);
print_r($normalized);
このように、インターフェイスによって返されたフィールドが大文字、小文字、または混合であるかどうかに関係なく、必要な形式に均一に処理できます。
array_change_key_case()は、配列でのみ使用できます。
stdclassは最初に配列に変換する必要があります。
変換後にこの関数を呼び出すことをお勧めします。
処理後、必要に応じてオブジェクトに戻すこともできます。
このトリックは、JSONデータを処理するとき、特に外部インターフェイスに接続するときに非常に一般的に使用されており、一貫性のないフィールドケースによって引き起こされる多くのバグを回避するのに役立ちます。