매일 PHP 개발에서, 우리는 종종 "열거 값? 태그"사이의 상호 전환에 직면합니다. 예를 들어, 주문 상태 :
$statusMap = [
0 => '지불해야합니다',
1 => '유급의',
2 => '배송',
3 => '완전한',
];
이 구조는 상태 코드에서 해당 텍스트 설명의 추출을 용이하게합니다. 그러나 때때로 우리는 "선적 된"을 기반으로 해당 상태 코드 2 를 취하는 것과 같이 다른 방법으로 운영해야합니다. 현재 추가 구조적 지원이 없으면 전체 배열을 가로 지르고 유사한 논리를 작성해야 할 수도 있습니다.
function getStatusCode($label) {
foreach ($statusMap as $code => $desc) {
if ($desc === $label) {
return $code;
}
}
return null;
}
조금 오래 찢어 보입니다. 현재 PHP와 함께 제공되는 array_flip () 함수는 유용합니다!
Array_flip () 는 PHP의 내장 함수이며, 배열의 "키"와 값을 페어링하는 데 사용됩니다.
array_flip(array $array): array
참고 :
배열의 값은 키 (예 : 문자열 또는 정수)로 사용할 수있는 고유하고 스칼라 값이어야합니다.
중복 값이있는 경우 다음 값이 이전 값을 덮어 씁니다.
열거적인 값 배열을 우아하게 뒤집는 방법을 살펴 보겠습니다.
$statusMap = [
0 => '지불해야합니다',
1 => '유급의',
2 => '배송',
3 => '완전한',
];
$labelToCodeMap = array_flip($statusMap);
echo $labelToCodeMap['배송']; // 산출 2
순간적으로 훨씬 간단합니까? "label"에서 "value"로 매핑 테이블을 얻으려면 Array_flip () 만 사용합니다.
사용자 성별 옵션이 열거되어 있다고 가정합니다.
$genderMap = [
'M' => '남성',
'F' => '여성',
'O' => '다른',
];
양식을 제출할 때 사용자는 'F' 로 다시 변환하고 데이터베이스에 저장하려는 '여성'을 선택합니다.
$input = '여성';
$labelToValue = array_flip($genderMap);
$genderCode = $labelToValue[$input] ?? null;
if ($genderCode === null) {
echo "불법 성별 가치";
} else {
// 데이터베이스에 저장되었다고 가정하십시오
saveGenderToDB($genderCode);
}
코드가 더 작을뿐만 아니라 논리는 매우 명확하고 이해하기 쉽습니다.
여러 장소에서 거꾸로 된 배열을 사용해야하는 경우 프로젝트에서 공통 방법을 정의 할 수도 있습니다.
function getFlippedMap(array $map): array {
static $cache = [];
$hash = md5(json_encode($map));
if (!isset($cache[$hash])) {
$cache[$hash] = array_flip($map);
}
return $cache[$hash];
}
이런 식으로 여러 번 호출하더라도 기존 반전 결과를 재사용하여 성능을 향상시킬 수 있습니다.
원래 배열의 값이 고유하지 않으면 Array_flip ()는 이전 키를 자동으로 덮어 씁니다.
$arr = [
'a' => 'apple',
'b' => 'banana',
'c' => 'apple',
];
print_r(array_flip($arr));
출력은 다음과 같습니다.
Array
(
[banana] => b
[apple] => c // 'a' 덮힌
)
이로 인해 열거 값을 다룰 때 버그가 발생할 수 있으므로 반전 전에 값이 고유한지 확인하는 것이 좋습니다.
Array_flip () 는 작지만 매우 실용적인 기능이며 특히 "레이블? 값"사이의 빠른 변환에 적합합니다. 이를 통해 PHP 코드를 더 간결하고 읽기 쉽고 오류가 줄어 듭니다. 다음에 루프를 작성할 때, 당신은 그것에 대해 생각할 수도 있습니다 : Array_flip ()를 사용하여 한 단계로 가져올 수 있습니까?