php에서 array_change_key_case () 및 array_map () 은 모두 매우 실용적인 배열 처리 기능이지만 처리 할 때 다르게 수행합니다. 그렇다면이 두 기능을 결합하여 다차원 배열을 처리 할 수 있습니까? 이 문제에 대해 함께 논의합시다.
Array_change_key_case (array $ array, int $ case = case_lower) : 배열의 모든 키 이름을 소문자 또는 대문자로 변환하는 데 사용됩니다.
Array_Map (호출 가능한 $ 콜백, 배열 $ 배열) : 배열의 각 요소에 콜백 함수를 적용합니다.
이 두 기능의 사용은 1 차원 배열을 처리 할 때 응력이 없지만 다차원 배열 시나리오와 관련하여 일부 추가 논리적 처리가 필요합니다.
다음과 같이 다차원 배열이 있다고 가정합니다.
$data = [
"Name" => "Alice",
"Details" => [
"Age" => 25,
"Email" => "alice@m66.net"
],
"Preferences" => [
"Colors" => ["Red", "Green"],
"Languages" => ["PHP", "JavaScript"]
]
];
모든 키 이름을 소문자로 변환하려고합니다. 현재 array_change_key_case ()를 사용하는 경우 직접 :
$result = array_change_key_case($data, CASE_LOWER);
우리는 가장 바깥 쪽 키만 처리 할 수 있으며, 키는 세부 사항 과 기본 설정 으로 변환되지 않습니다.
이것은이 기사의 핵심 질문으로 이어집니다. Array_change_key_case () 와 Array_map () 의 조합을 사용하여 다차원 배열을 재귀 적으로 처리하는 방법은 무엇입니까?
Array_change_key_case () 를 결합하여 재귀 함수를 사용자 정의하여 모든 레벨에서 키를 처리 할 수 있습니다.
function recursive_change_key_case(array $array, int $case = CASE_LOWER): array {
$newArray = array_change_key_case($array, $case);
foreach ($newArray as $key => $value) {
if (is_array($value)) {
$newArray[$key] = recursive_change_key_case($value, $case);
}
}
return $newArray;
}
라고 불리는:
$processed = recursive_change_key_case($data, CASE_LOWER);
print_r($processed);
Array
(
[name] => Alice
[details] => Array
(
[age] => 25
[email] => alice@m66.net
)
[preferences] => Array
(
[colors] => Array
(
[0] => Red
[1] => Green
)
[languages] => Array
(
[0] => PHP
[1] => JavaScript
)
)
)
보시다시피, 중첩 레벨의 이름을 포함한 모든 키 이름도 소문자로 성공적으로 변환되었습니다 .
그렇다면 여기서 Array_map ()를 사용할 수 있습니까? 주로 키가 아닌 값을 처리하는 데 적합합니다 . 문자열, 서식 등의 공간 제거와 같은 각 값 (키 이름이 아닌 각 값)을 처리하려면 다음과 같이 사용할 수 있습니다.
function recursive_map(array $array, callable $callback): array {
foreach ($array as $key => $value) {
if (is_array($value)) {
$array[$key] = recursive_map($value, $callback);
} else {
$array[$key] = $callback($value);
}
}
return $array;
}
예를 들어, 모든 문자열에서 공간을 제거하십시오.
$cleaned = recursive_map($processed, function($value) {
return is_string($value) ? str_replace(' ', '', $value) : $value;
});
array_change_key_case ()는 키 이름을 상류 및 소문자로 변환 할 수 있지만 1 차원 배열 만 지원합니다 .
Array_Map () 은 배열의 값을 처리하는 데 더 적합하며 키를 처리하지 않습니다.
다차원 배열의 키 이름 케이스 변환을 처리 하려면 재귀 적 사용자 지정 기능을 결합하여 구현할 수 있습니다.
키와 값을 동시에 처리하려면 두 기능을 함께 사용하여 각각 다른 목표에 따라 행동 할 수 있습니다.
이러한 기술을 마스터하면 PHP의 복잡한 배열을 처리하는 능력이 크게 향상됩니다. 이 기사가 도움이되기를 바랍니다!