php에서 array_flip () 함수는 배열의 키와 값을 교환하는 데 사용되며, 배열의 모든 키를 값으로 값, 키로 값으로, 새 배열을 반환합니다. 일반 배열 값의 경우 Array_flip ()가 매우 매끄럽게 실행됩니다. 그러나이 함수가 연관 배열의 값으로 값으로 값을 처리하는 방법에 대한 심층적 인 논의가 필요할 수 있습니다.
먼저 Array_flip () 의 기본 사용법을 살펴 보겠습니다. 간단한 연관 배열이 있다고 가정하면 코드는 다음과 같습니다.
$array = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$flipped = array_flip($array);
print_r($flipped);
출력은 다음과 같습니다.
Array
(
[apple] => a
[banana] => b
[cherry] => c
)
위에서 볼 수 있듯이 Array_flip ()는 배열 값을 키로 변환하고 원래 키는 값이됩니다. 이 작업은 매우 직접적이며 기본 데이터 유형 (예 : 문자열, 정수 등)에서 매우 잘 수행됩니다.
배열의 값이 객체 인 경우 array_flip () 의 동작은 그렇게 간단하지 않습니다. 다음 코드를 살펴 보겠습니다.
class Fruit {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$array = [
"a" => new Fruit("apple"),
"b" => new Fruit("banana"),
"c" => new Fruit("cherry")
];
$flipped = array_flip($array);
print_r($flipped);
출력이 다음과 같이 기대할 수 있습니다.
Array
(
[apple] => a
[banana] => b
[cherry] => c
)
그러나 실제 결과는 아닙니다. PHP는 객체를 Array_flip () 에게 값으로 전달하려고 할 때 문제가 발생합니다. 객체는 배열의 키로 사용할 수 없기 때문입니다. PHP는 객체를 새로운 키로 문자열로 변환하려고 시도하지만 기본적으로 객체는 클래스 이름과 내부 고유 식별자 (예 : 과일#1 )로 표시됩니다.
따라서 위의 코드의 출력은 다음과 같습니다.
Array
(
[Fruit#1] => a
[Fruit#2] => b
[Fruit#3] => c
)
객체의 비교는 내용이 아닌 인스턴스 식별자를 기반으로하기 때문에 Array_flip () 는 객체 값을 직접 키로 변환 할 수 없음을 보여줍니다.
PHP의 객체는 원시 데이터 유형과 직접 복사되지 않고 참조별로 전달됩니다. 객체 비교는 속성이나 값이 아닌 메모리 내 참조를 기반으로합니다. 따라서 array_flip () 가 객체를 배열의 키로 사용하려고 할 때 실제로 내용이 아닌 객체에 대한 참조를 다루고 있습니다.
또한 객체의 식별자가 동적이므로 PHP는 유효한 키로 직접 변환 할 수 없습니다. 유효한 배열 키는 정수 또는 문자열과 같은 스칼라 유형이어야하며 객체 참조는이 조건을 충족하지 않습니다.
배열에서 객체 값을 실제로 교체 해야하는 경우 다음 솔루션을 고려할 수 있습니다.
객체를 문자열로 변환하십시오 . __toString () 메소드를 구현하여 개체를 문자열로 변환합니다. 이를 통해 Array_flip ()는 이 문자열 값을 새 키로 사용할 수 있습니다.
class Fruit {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __toString() {
return $this->name;
}
}
$array = [
"a" => new Fruit("apple"),
"b" => new Fruit("banana"),
"c" => new Fruit("cherry")
];
$flipped = array_flip($array);
print_r($flipped);
출력은 다음과 같습니다.
Array
(
[apple] => a
[banana] => b
[cherry] => c
)
객체의 속성을 사용하십시오 . 개체에 사용 가능한 속성이 포함 된 경우 이러한 속성을 키로 사용할 수도 있습니다. 객체의 특성을 추출하여 배열로 변환 한 다음 Array_flip ()를 사용합니다.
$array = [
"a" => new Fruit("apple"),
"b" => new Fruit("banana"),
"c" => new Fruit("cherry")
];
$processedArray = [];
foreach ($array as $key => $fruit) {
$processedArray[$fruit->name] = $key;
}
print_r($processedArray);
출력은 동일합니다.
Array
(
[apple] => a
[banana] => b
[cherry] => c
)
Array_flip () 함수는 객체를 값으로 올바르게 처리하지 않고 배열의 키로 변환하지 않습니다. 객체 값을 처리 해야하는 경우 __toString () 메소드를 사용하여 개체를 문자열로 변환하거나 객체의 속성을 키로 사용하는 것을 고려할 수 있습니다.