현재 위치: > 최신 기사 목록> array_flip () 중첩 어레이를 처리 할 수 ​​없습니까? 확인하십시오

array_flip () 중첩 어레이를 처리 할 수 ​​없습니까? 확인하십시오

M66 2025-06-03

php에서 array_flip ()는 배열의 키와 값을 위치로 바꿀 수있는 매우 유용한 기능입니다. 간단히 말해서 배열의 키는 값이되고 값은 키가됩니다. 그러나 중첩 배열이 포함 된 배열에서 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 () 의 작업 원리와 한계를 이해하면 오류를 피하고 사용할 때보다 효율적인 코드를 작성하는 데 도움이됩니다.