PHP 개발에서 Array_flip ()는 키와 배열 값을 교환 할 수있는 매우 일반적인 기능입니다. 이 기능의 구문은 매우 간단하지만 사용하면 주목할만한 한계가 있습니다. 그렇지 않으면 Array_flip ()는 오류를보고하거나 불법 값을 자동으로 무시합니다.
그렇다면 왜이 제한이 있습니까? 우리는 여러 측면에서 그에 따른 이유와 한계를 분석합니다.
$original = [
'apple' => 'red',
'banana' => 'yellow'
];
$flipped = array_flip($original);
print_r($flipped);
산출:
Array
(
[red] => apple
[yellow] => banana
)
여기에서는 array_flip ()가 문자열 유형이기 때문에 '빨간색' 과 '옐로우' 를 키로 성공적으로 바꿉니다.
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!
부울 값 ( True 가 1이 될 것)과 같은 특정 유형이 문자열이나 정수로 캐스트 될 수 있더라도 쉽게 갈등을 일으킬 수 있습니다. 예를 들어:
$array = [
'a' => true,
'b' => 1,
'c' => '1'
];
$flipped = array_flip($array);
print_r($flipped);
산출:
Array
(
[1] => c
)
원래 세 가지 다른 값이 있었지만 모두 같은 키 1 으로 "뒤집 혔고, 처음 두 개는 덮어 썼으며 결국 'C'=> 1 항목 만 유지되었습니다.
그렇기 때문에 Array_flip ()는 값이 키로 안전 할 수있는 유형의 값이어야하는 이유입니다. 그렇지 않으면 데이터 손실 또는 덮어 쓰기가 발생할 수 있습니다.
국가 코드 대 국가 이름 매핑이 있다고 가정하고 국가 이름을 통해 국가 코드를 신속하게 찾으려고합니다.
$countryCodes = [
'US' => 'United States',
'FR' => 'France',
'JP' => 'Japan'
];
$flipped = array_flip($countryCodes);
// 빠른 검색:
$code = $flipped['Japan']; // 결과는입니다 'JP'
이 시나리오에서는 array_flip ()를 사용하는 것이 매우 효율적이며 값이 문자열이므로 유형 문제가 없습니다.
값에 키로 사용할 수없는 배열, 객체 또는 기타 유형이 포함 된 경우 다음 방법을 사용할 수 있습니다.
$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);
산출: