PHP에서는 배열을 처리 할 때, 특히 외부 소스 (예 : 양식, API 반환 등)에서 얻은 연관 배열 데이터를 처리 할 때 주요 사례 변환이 필요합니다. Array_change_key_case ()는 배열 키 이름의 경우를 통합하는 데 사용되는 함수입니다. 그러나 종종 간과되지만 상당히 중요한 문제는 다음과 같습니다.
Array_change_key_case ()가 배열에서 "숫자 키"의 경우를 변경 합니까 ?
공식 PHP 문서 에 따르면 array_change_key_case () 의 역할은 다음과 같습니다.
키가 대문자 또는 소문자로 변환되는 어레이를 반환합니다.
그러나 이것은 문자열 유형 키에만 적용되며 숫자 키의 경우 함수가 수정되지 않습니다.
다음은 실제 행동을 보여주는 예입니다.
<?php
$data = [
"Name" => "Alice",
"EMAIL" => "alice@example.com",
100 => "일련 번호",
"AGE" => 30
];
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
?>
출력 결과 :
Array
(
[name] => Alice
[email] => alice@example.com
[100] => 일련 번호
[age] => 30
)
당신은 볼 수 있습니다 :
모든 문자열 키 (예 : "이름" , "이메일" , "Age" )는 소문자로 성공적으로 변환됩니다.
숫자 키 100은 변하지 않으며, 현악기 나 변화가되지는 않습니다.
PHP에서는 숫자가 사안이 없기 때문입니다. PHP의 배열 키는 문자열 또는 정수 (적분) 일 수 있습니다. 사례 변환은 본질적으로 문자열에만 유효합니다. 따라서 array_change_key_case ()는 키가 문자열 인 요소 만 처리합니다.
API 요청을 통해 배열 데이터 세트를 반환하고 키 이름을 균일하게 처리하려면이 기능을 사용할 수 있습니다. 그러나 과정에서 숫자 인덱스의 키가 문자열로 잘못 변환되거나 변경되는 것에 대해 걱정할 필요가 없습니다. 예를 들어:
<?php
$json = '{
"UserID": 101,
"Username": "bob",
"Scores": {
"0": 90,
"1": 85,
"2": 88
}
}';
$data = json_decode($json, true);
$data = array_change_key_case($data, CASE_LOWER);
// 산출 JSON 프론트 엔드로 구조
echo json_encode($data);
?>
프론트 엔드는 영향을받지 않고 .Scores [0]를 사용하여 데이터에 여전히 액세스 할 수 있습니다.
배열에서 중첩 구조를 추가로 처리 해야하는 경우 (예 : 모든 레벨에서 키 이름을 소문자로 재귀 적으로 변환하는 등) 재귀 기능을 캡슐화 할 수 있지만 여전히 숫자 키에 대해 걱정할 필요가 없습니다.
function array_change_key_case_recursive($arr, $case = CASE_LOWER) {
return array_map(function ($item) use ($case) {
if (is_array($item)) {
return array_change_key_case_recursive($item, $case);
}
return $item;
}, array_change_key_case($arr, $case));
}
? array_change_key_case ()는 문자열 키 에만 유효합니다.
? 배열에서 숫자 키를 수정 하지 않습니다 .
?? 숫자 키는 PHP에서 엄격하게 정수이며 상단 및 소문 이론이 없습니다.
?? 중첩 된 배열을 재귀 적으로 처리 해야하는 경우 재귀 함수를 수동으로 캡슐화하여 문자열 키를 처리해야합니다.
이런 식으로, 당신은 개발 중에 array_change_key_case ()를 마음의 평화와 함께 사용할 수 있습니다.