php에서 array_flip ()는 배열의 키와 값을 위치로 바꿀 수있는 매우 유용한 기능입니다. 간단히 말해서 배열의 키는 값이되고 값은 키가됩니다. 그러나 중첩 배열이 포함 된 배열에서 Array_flip ()를 사용하려고하면 오류가 발생하거나 예상대로 작동하지 않는다는 것을 알게됩니다. 오늘, array_flip ()가 중첩 어레이를 처리 할 수없는 이유를 살펴 보겠습니다.
Array_flip () 의 기본 기능은 키와 값을 배열에 페어링하는 것입니다. 예를 들어 다음 코드를 고려하십시오.
$array = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$flipped = array_flip($array);
print_r($flipped);
출력 결과는 다음과 같습니다.
Array
(
[apple] => a
[banana] => b
[cherry] => c
)
이 출력에서 Array_flip ()가 배열의 키와 값을 성공적으로 교환 함을 알 수 있습니다.
그러나 중첩 배열을 Array_flip () 로 전달하려고하면 상황이 복잡해집니다. 예를 들어 다음 배열을 고려하십시오.
$array = [
"a" => ["apple", "orange"],
"b" => ["banana", "grape"]
];
$flipped = array_flip($array);
print_r($flipped);
이 코드는 오류가 발생합니다.
Warning: array_flip() expects parameter 1 to be array, string given in ...
이 오류는 array_flip ()가 중첩 어레이를 처리 할 수 없음을 나타냅니다. 그 이유는 Array_flip ()가 1 차원 배열 만 처리 할 수 있으며 목표는 배열의 키와 값을 바꾸는 것입니다. 배열 값이 배열 인 경우 Array_flip ()는 배열을 유효한 키로 변환 할 수 없기 때문에 중첩 배열을 키 값으로 반전 할 수 없습니다.
PHP에서 배열의 키는 스칼라 유형 (예 : 정수, 문자열 또는 부울 값)이어야합니다. 배열 자체는 복잡한 데이터 구조이며 식별에 직접 사용할 수 없기 때문에 PHP는 배열을 키로 사용하지 않습니다. 실제로, 비 스칼라 유형 (예 : 배열, 객체 등)은 배열의 키로 사용할 수 없습니다.
Array_flip ()은 각 배열의 값이 스칼라 (키로 변환 될 수 있음)이어야하므로 중첩 어레이는 분명히이 조건을 충족 할 수 없습니다. 따라서 배열이 포함 된 배열을 반전 시키려고 할 때 PHP는 오류를보고합니다.
중첩 어레이가 포함 된 상황을 처리 해야하는 경우 사용자 정의 처리 로직을 작성하십시오. 예를 들어, 중첩 어레이를 재귀 적으로 확장하고 키 값 쌍을 추출 할 수 있습니다.
function array_flip_recursive($array) {
$flipped = [];
foreach ($array as $key => $value) {
if (is_array($value)) {
// 값이 배열 인 경우,재귀 처리
$flipped = array_merge($flipped, array_flip_recursive($value));
} else {
$flipped[$value] = $key;
}
}
return $flipped;
}
$array = [
"a" => ["apple", "orange"],
"b" => ["banana", "grape"]
];
$flipped = array_flip_recursive($array);
print_r($flipped);
위의 코드에서 array_flip_recursive () 함수는 중첩 어레이를 재귀 적으로 처리하고 중첩 배열의 값을 키로 올바르게 반전시킵니다.
array_flip ()가 중첩 배열을 처리 할 수없는 이유는 1 차원 배열 만 처리 할 수 있고 중첩 어레이의 값은 배열 유형이며 키로 사용할 수 없기 때문입니다. 이 상황을 처리하기 위해 재귀 적 방법을 통해 중첩 어레이를 처리하여 각 값을 법적 키로 사용할 수 있도록 할 수 있습니다. array_flip () 의 작업 원리와 한계를 이해하면 오류를 피하고 사용할 때보다 효율적인 코드를 작성하는 데 도움이됩니다.