현재 위치: > 최신 기사 목록> 일반적인 오해 : 직접 Array_flip () 사용자 데이터의 결과

일반적인 오해 : 직접 Array_flip () 사용자 데이터의 결과

M66 2025-06-03

PHP 배열을 처리 할 때 Array_flip ()는 간단하지만 숨겨진 위험 기능입니다. 그 목적은 사용자가 제공 한 데이터에 직접 사용하면 예상하지 않은 일련의 문제를 유발할 수 있습니다.

이 기사는 예제를 통해 Array_flip () 의 잠재적 인 함정을 분석하고보다 강력한 PHP 응용 프로그램을 구축하는 데 도움이되는보다 안전한 대안을 제공합니다.

Array_flip () 란 무엇입니까?

array_flip () 의 기본 사용은 매우 직관적입니다.

 $original = [
    'apple' => 'fruit',
    'carrot' => 'vegetable'
];

$flipped = array_flip($original);

print_r($flipped);

산출:

 Array
(
    [fruit] => apple
    [vegetable] => carrot
)

값을 키로 변경하고 키는 값으로 변경됩니다. 이것은 "값"을 기반으로 "키"를 빠르게 찾으려는 경우와 같은 일부 시나리오에서 매우 유용합니다. 그러나이 정의에는 문제가 숨겨져 있습니다.

질문 1 : 사용자 데이터의 중복 값

Array_flip ()은 뒤집을 때 모든 값이 고유하고 키를 사용할 수 있어야합니다. 배열에 중복 값이있는 경우 오류 프롬프트를 제공하지 않고 이전 데이터를 조용히 덮어 씁니다 .

사용자 데이터의 예를 살펴 보겠습니다.

 $userInput = [
    'user1' => 'admin',
    'user2' => 'editor',
    'user3' => 'admin' // 반복 가치
];

$flipped = array_flip($userInput);

print_r($flipped);

출력은 다음과 같습니다.

 Array
(
    [admin] => user3
    [editor] => user2
)

관리자가 사용자 1 에 해당한다고 생각하십니까? 아니요, user3는 그것을 무시합니다. 이는 사용자 역할, 권한, 태그 및 기타 데이터를 처리 할 때 논리적 오류를 유발할 수 있습니다.

질문 2 : 키로 사용할 수없는 값 (비 스칼라)

PHP의 어레이 키는 정수 또는 문자열 일 수 있습니다. 사용자 제출 된 배열에 값으로 배열 또는 객체가 포함 된 경우 Array_flip ()는 경고를 던지고 이러한 요소를 무시합니다.

 $userInput = [
    'key1' => 'value1',
    'key2' => ['not' => 'allowed'],
    'key3' => 'value3'
];

$flipped = array_flip($userInput);

print_r($flipped);

산출:

 Warning: array_flip(): Can only flip STRING and INTEGER values!
Array
(
    [value1] => key1
    [value3] => key3
)

이 경고는 개발 환경에서 볼 수 있지만 생산 환경에는 숨겨져 있으며 결과적으로 정상적인 모습을 보이지만 데이터가 깨지는 배열을 얻습니다.

질문 3 : 가치 유형의 변화로 인한 예측할 수없는 행동

값이 동일하게 보이더라도 Array_flip ()는 유형을 엄격하게 구별합니다. 예를 들어, 문자열 "1" 과 정수 1은 동일한 키로 취급되므로 덮어 쓰기가 발생합니다.

 $userInput = [
    'a' => 1,
    'b' => '1'
];

$flipped = array_flip($userInput);

print_r($flipped);

산출:

 Array
(
    [1] => b
)

열쇠 "A"는 완전히 손실되었습니다.

더 안전한 대안

값에서 백 확인 키 기능이 필요하지만 데이터 소스가 신뢰할 수 없으면 다음 방법을 사용할 수 있습니다.

방법 1 : 모든 키 값 쌍을 수집하십시오

 $reverseMap = [];
foreach ($userInput as $key => $value) {
    if (is_scalar($value)) {
        $reverseMap[$value][] = $key;
    }
}

이런 식으로 모든 중복 값에 해당하는 키를 유지할 수 있습니다.

 print_r($reverseMap);

산출:

 Array
(
    [admin] => Array ( [0] => user1 [1] => user3 )
    [editor] => Array ( [0] => user2 )
)

요약 : Array_flip () 를 사용하려면 극도의 관리가 필요합니다

Array_flip ()는 깨끗하고 잘 구조화 된 내부 데이터를 처리 할 때 매우 유용하지만 할 수없는 한 사용자 입력 에주의해서 사용하십시오.

  • 가치가 고유한지 확인하십시오

  • 값이 스칼라 유형인지 확인하십시오 (문자열 또는 정수)

  • 플립 목적을 명확하게 알고 예외를 처리 할 준비가되어 있습니다.

그렇지 않으면, 당신은 구석에 조용히 버그를 도입 할 수 있으며, 언젠가 사용자는 포럼의 허가 오류에 대해 불만을 제기 할 때까지 범인이 무해한 array_flip () 라는 것을 알고 있습니다.

이 기사가 숨겨져 있지만 위험한 구덩이를 피하는 데 도움이되기를 바랍니다. 권한 관리 시스템 또는 데이터 매핑 기능을 개발하는 경우 Array_flip ()를 일시적으로 아래로 내리고보다 강력한 솔루션을 고려할 수도 있습니다!

추가 연구는 다음을 확인하십시오.
?? https://m66.net/php-manual/array_flip
?? https://m66.net/php-best-practices

비슷한 사용 질문이 있으면 메시지를 남겨 두십시오. PHP의 세계는 오래되었지만 세부 사항에 숨겨져있는 악마가 있습니다.