PHP에서 Array_Column 함수는 다차원 배열에서 지정된 열에서 데이터를 추출하는 데 사용됩니다. 일반적으로 배열에서 각 자식 요소의 특정 필드 또는 값을 추출하는 데 사용됩니다. 이 기능은 간단한 배열을 처리 할 때 잘 작동하지만 객체 속성을 추출하려고 할 때 몇 가지 문제가 발생할 수 있습니다. 이 기사는 이러한 문제와 해당 솔루션을 자세히 분석합니다.
Array_Column 함수는 객체가 아닌 배열을 기반으로 설계되었습니다. 간단한 연관 배열의 경우 array_column은 잘 작동하지만 객체가 포함 된 배열의 경우 기본적으로 객체의 속성을 직접 추출 할 수 없습니다. array_column은 추출 할 배열의 키 또는 필드가 필요하지만 객체에는 배열과 같은 키 값 구조가 없습니다.
객체 배열이 있고 각 객체의 이름 속성을 추출하고 싶다고 가정합니다.
<?php
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$people = [
new Person('Alice', 30),
new Person('Bob', 25),
new Person('Charlie', 35)
];
$names = array_column($people, 'name'); // 여기서 실패 할 것입니다
print_r($names);
?>
산출:
Warning: array_column() expects parameter 1 to be array, object given in ...
위에서 볼 수 있듯이 Array_Column은 배열이 예상되지만 객체 배열이 전달된다는 오류를보고합니다. 이는 Array_Column이 객체 속성의 추출을 지원하지 않기 때문입니다.
이 문제를 해결하는 방법에는 여러 가지가 있습니다. 다음은 두 가지 일반적인 방법입니다.
먼저 객체 배열을 연관 배열로 변환 할 수 있습니다. json_decode 및 json_encode를 빠르게 변환하거나 get_object_vars 함수를 사용하여 객체를 배열로 변환 할 수 있습니다.
$peopleArray = array_map(function($person) {
return get_object_vars($person); // 객체를 배열로 변환합니다
}, $people);
$names = array_column($peopleArray, 'name');
print_r($names);
산출:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
이 메소드는 각 객체를 배열로 변환 한 다음 Array_Column을 사용하여 속성을 정상적으로 추출 할 수 있습니다.
객체의 전체 배열을 먼저 연관 배열로 변환하지 않으려면 Array_Map을 사용하여 각 객체의 속성을 수동으로 추출 할 수 있습니다.
$names = array_map(function($person) {
return $person->name; // 객체의 속성에 직접 액세스하십시오
}, $people);
print_r($names);
산출:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
이 방법은 객체를 직접 조작하고 객체를 추출하여 특성을 배열로 변환하는 프로세스를 피합니다.
PHP에서 Array_Column은 다차원 배열에서 지정된 열을 추출하기에 매우 편리한 기능입니다. 그러나 다양한 객체에서 속성을 추출하려고 할 때 Array_Column은 배열 기반 작업 만 지원하므로 직접 작동하지 않습니다. 객체를 배열로 변환하거나 익명 함수와 함께 Array_Map을 사용 하여이 문제를 해결할 수 있습니다.
이 기사가 객체를 처리 할 때 오류를 피하면서 Array_Column을 더 잘 이해하고 사용하는 데 도움이되기를 바랍니다.