php에서 array_flip ()는 배열을 넣는 데 사용할 수있는 매우 편리한 기능입니다. 매우 간단하고 실용적으로 들리지만, 특히 배열에 객체가 포함 된 경우 사용할 때주의해야합니다. 이 기사에서는 객체가 포함 된 배열이 Array_flip () 로 처리 할 수없는 이유와 그렇게 할 때 어떤 문제가 발생하는지 탐색합니다.
$input = [
'apple' => 'red',
'banana' => 'yellow',
];
$flipped = array_flip($input);
print_r($flipped);
산출:
Array
(
[red] => apple
[yellow] => banana
)
위에서 볼 수 있듯이 키 값 쌍이 교환되어 문제가 없습니다. 그러나 하나의 키 포인트에 주목하십시오. 뒤집힌 키는 법적 배열 키 , 즉 int 또는 문자열 유형이어야합니다.
개체가 포함 된 예를 살펴 보겠습니다.
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의 주요 유형은 정수 및 문자열로 제한됩니다. 객체 (익명 클래스 포함)는 법적 핵심 유형이 아닙니다.
$array = [
'a' => 'apple',
'b' => new stdClass(),
'c' => 'carrot'
];
$flipped = array_flip($array);
산출:
Warning: array_flip(): Can only flip STRING and INTEGER values!
하나의 값 만 객체이더라도 전체 array_flip () 조작이 실패합니다. 따라서 모든 데이터 또는 프로그램 중단을 잃게됩니다.
객체가 포함 된 배열을 뒤집어야하는 경우 일반적 으로이 프로세스를 수동으로 처리해야합니다. 예를 들어, 객체의 특정 속성을 기반으로 거꾸로 된 배열을 수동으로 빌드 할 수 있습니다.
$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 ()를 직접 사용하는 대신 객체의 고유 한 속성을 기반으로 "플립"기능을 구현할 수 있습니다.
Array_flip () 는 강력한 도구이지만 전능하지는 않습니다. 프로세스 배열에 키로 사용할 수없는 객체 또는 기타 데이터 유형 (예 : 배열, 리소스 등)이 포함되면 오류가 발생하거나 스크립트를 방해합니다. 코드의 견고성을 보장하려면 호출하기 전에 항상 값의 유형을 확인하거나 더 결함이있는 대안을 사용해야합니다.