현재 위치: > 최신 기사 목록> array_flip ()를 사용하여 객체 배열을 처리 할 수없는 이유는 무엇입니까?

array_flip ()를 사용하여 객체 배열을 처리 할 수없는 이유는 무엇입니까?

M66 2025-05-17

php에서 array_flip ()는 배열을 넣는 데 사용할 수있는 매우 편리한 기능입니다. 매우 간단하고 실용적으로 들리지만, 특히 배열에 객체가 포함 된 경우 사용할 때주의해야합니다. 이 기사에서는 객체가 포함 된 배열이 Array_flip () 로 처리 할 수없는 이유와 그렇게 할 때 어떤 문제가 발생하는지 탐색합니다.

1. array_flip () 의 기본 원리

 $input = [
    'apple' => 'red',
    'banana' => 'yellow',
];
$flipped = array_flip($input);
print_r($flipped);

산출:

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

위에서 볼 수 있듯이 키 값 쌍이 교환되어 문제가 없습니다. 그러나 하나의 키 포인트에 주목하십시오. 뒤집힌 키는 법적 배열 키 , 즉 int 또는 문자열 유형이어야합니다.

2. 배열에 객체가 포함되어 있으면 어떻게됩니까?

개체가 포함 된 예를 살펴 보겠습니다.

 class User {
    public $name;
    function __construct($name) {
        $this->name = $name;
    }
}

$user1 = new User('Alice');
$user2 = new User('Bob');

$array = [
    'u1' => $user1,
    'u2' => $user2,
];

$flipped = array_flip($array);

이 코드를 실행할 때 PHP는 경고 또는 치명적인 오류를 던집니다.

 Warning: array_flip(): Can only flip STRING and INTEGER values!

왜? 객체는 어레이의 키로 사용할 수 없기 때문입니다. PHP의 주요 유형은 정수 및 문자열로 제한됩니다. 객체 (익명 클래스 포함)는 법적 핵심 유형이 아닙니다.

3. 추가 예 : 혼합 어레이

 $array = [
    'a' => 'apple',
    'b' => new stdClass(),
    'c' => 'carrot'
];

$flipped = array_flip($array);

산출:

 Warning: array_flip(): Can only flip STRING and INTEGER values!

하나의 값 만 객체이더라도 전체 array_flip () 조작이 실패합니다. 따라서 모든 데이터 또는 프로그램 중단을 잃게됩니다.

4. 올바른 방법은 무엇입니까?

객체가 포함 된 배열을 뒤집어야하는 경우 일반적 으로이 프로세스를 수동으로 처리해야합니다. 예를 들어, 객체의 특정 속성을 기반으로 거꾸로 된 배열을 수동으로 빌드 할 수 있습니다.

 $array = [
    'u1' => new User('Alice'),
    'u2' => new User('Bob'),
];

$flipped = [];

foreach ($array as $key => $user) {
    if ($user instanceof User) {
        $flipped[$user->name] = $key;
    }
}

print_r($flipped);

산출:

 Array
(
    [Alice] => u1
    [Bob] => u2
)

이렇게하면 Array_flip ()를 직접 사용하는 대신 객체의 고유 한 속성을 기반으로 "플립"기능을 구현할 수 있습니다.

5. 요약

Array_flip () 는 강력한 도구이지만 전능하지는 않습니다. 프로세스 배열에 키로 사용할 수없는 객체 또는 기타 데이터 유형 (예 : 배열, 리소스 등)이 포함되면 오류가 발생하거나 스크립트를 방해합니다. 코드의 견고성을 보장하려면 호출하기 전에 항상 값의 유형을 확인하거나 더 결함이있는 대안을 사용해야합니다.