현재 위치: > 최신 기사 목록> array_flip () 함수의 핵심 값이 문자열 또는 정수 여야하는 이유는 무엇입니까? 이유와 한계를 이해하십시오

array_flip () 함수의 핵심 값이 문자열 또는 정수 여야하는 이유는 무엇입니까? 이유와 한계를 이해하십시오

M66 2025-06-03

PHP 개발에서 Array_flip ()는 키와 배열 값을 교환 할 수있는 매우 일반적인 기능입니다. 이 기능의 구문은 매우 간단하지만 사용하면 주목할만한 한계가 있습니다. 그렇지 않으면 Array_flip ()는 오류를보고하거나 불법 값을 자동으로 무시합니다.

그렇다면 왜이 제한이 있습니까? 우리는 여러 측면에서 그에 따른 이유와 한계를 분석합니다.

1. Array_flip () 의 기본 사용법

 $original = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$flipped = array_flip($original);

print_r($flipped);

산출:

 Array
(
    [red] => apple
    [yellow] => banana
)

여기에서는 array_flip ()가 문자열 유형이기 때문에 '빨간색''옐로우' 를 키로 성공적으로 바꿉니다.

2. 키는 왜 문자열이나 정수 일 수 있습니까?

PHP 배열은 실제로 주문 된 맵이며 키는 정수 또는 문자열 일 수 있습니다. 이것은 일부 약한 언어와 다르며 유사하지만 JavaScript의 객체 키 메커니즘과 정확히 동일하지는 않습니다.

array_flip ()을 실행할 때 PHP는 원래 배열의 "값"을 새 배열의 "키"로 취급하려고합니다. 원래 배열의 값이 다음과 같은 경우

  • 끈? 예

  • 정수? 예

  • 부울, 부동 소수점 번호, 배열, 물체, null? 키로 허용되지 않습니다

예를 들어:

 $invalid = [
    'one' => true,
    'two' => [],
    'three' => new stdClass(),
    'four' => null,
];

$flipped = array_flip($invalid);

// 하나를 던질 것입니다 warning:array_flip(): Can only flip STRING and INTEGER values!

3. 유형 변환으로 인한 문제

부울 값 ( True1이 될 것)과 같은 특정 유형이 문자열이나 정수로 캐스트 될 수 있더라도 쉽게 갈등을 일으킬 수 있습니다. 예를 들어:

 $array = [
    'a' => true,
    'b' => 1,
    'c' => '1'
];

$flipped = array_flip($array);

print_r($flipped);

산출:

 Array
(
    [1] => c
)

원래 세 가지 다른 값이 있었지만 모두 같은 키 1 으로 "뒤집 혔고, 처음 두 개는 덮어 썼으며 결국 'C'=> 1 항목 만 유지되었습니다.

그렇기 때문에 Array_flip ()는 값이 키로 안전 할 수있는 유형의 값이어야하는 이유입니다. 그렇지 않으면 데이터 손실 또는 덮어 쓰기가 발생할 수 있습니다.

4. 실제 응용 시나리오의 예

국가 코드 대 국가 이름 매핑이 있다고 가정하고 국가 이름을 통해 국가 코드를 신속하게 찾으려고합니다.

 $countryCodes = [
    'US' => 'United States',
    'FR' => 'France',
    'JP' => 'Japan'
];

$flipped = array_flip($countryCodes);

// 빠른 검색:
$code = $flipped['Japan']; // 결과는입니다 'JP'

이 시나리오에서는 array_flip ()를 사용하는 것이 매우 효율적이며 값이 문자열이므로 유형 문제가 없습니다.

5. 값을 키로 사용할 수 없다면 어떻게해야합니까?

값에 키로 사용할 수없는 배열, 객체 또는 기타 유형이 포함 된 경우 다음 방법을 사용할 수 있습니다.

 $original = [
    'a' => 'cat',
    'b' => ['nested'],
    'c' => 'dog'
];

$filtered = array_filter($original, function($value) {
    return is_int($value) || is_string($value);
});

$flipped = array_flip($filtered);

print_r($flipped);

또는 Try-Catch를 사용하여 논리를 랩핑하십시오 (PHP는 예외를 제외하지 않지만 사용자 정의 로직으로 제어 할 수 있음) 오류를 피하십시오.

요약

Array_flip () 의 설계 제한은 PHP 배열 자체의 특성을 반영한 것입니다. 키는 정수 또는 문자열 일 수 있습니다 . 이 제한은 예측 가능성, 키의 성능을 보장하고 예상치 못한 값 덮어 쓰기를 피하는 것입니다. Array_flip ()를 사용하는 경우, 작동이 안전하고 신뢰할 수 있도록 배열의 값이 적절한 유형인지 확인하는 것이 좋습니다.

시스템의 URL에서 일부 키 값 쌍 변환을 수행 해야하는 경우 다음과 같이 수행 할 수 있습니다.

 $input = [
    'home' => 'https://m66.net/index',
    'about' => 'https://m66.net/about'
];

$flipped = array_flip($input);

print_r($flipped);

산출: