현재 위치: > 최신 기사 목록> array_column을 사용하여 객체 속성을 추출하지 못한 이유 분석

array_column을 사용하여 객체 속성을 추출하지 못한 이유 분석

M66 2025-04-28

PHP에서 Array_Column 함수는 다차원 배열에서 지정된 열에서 데이터를 추출하는 데 사용됩니다. 일반적으로 배열에서 각 자식 요소의 특정 필드 또는 값을 추출하는 데 사용됩니다. 이 기능은 간단한 배열을 처리 할 때 잘 작동하지만 객체 속성을 추출하려고 할 때 몇 가지 문제가 발생할 수 있습니다. 이 기사는 이러한 문제와 해당 솔루션을 자세히 분석합니다.

1. 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이 객체 속성의 추출을 지원하지 않기 때문입니다.

2.이 문제를 해결하는 방법은 무엇입니까?

이 문제를 해결하는 방법에는 여러 가지가 있습니다. 다음은 두 가지 일반적인 방법입니다.

반응식 1 : 객체를 배열로 변환합니다

먼저 객체 배열을 연관 배열로 변환 할 수 있습니다. json_decodejson_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을 사용하여 속성을 정상적으로 추출 할 수 있습니다.

해결책 2 : Array_Map 및 익명 함수를 사용하십시오

객체의 전체 배열을 먼저 연관 배열로 변환하지 않으려면 Array_Map을 사용하여 각 객체의 속성을 수동으로 추출 할 수 있습니다.

 $names = array_map(function($person) {
    return $person->name;  // 객체의 속성에 직접 액세스하십시오
}, $people);

print_r($names);

산출:

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

이 방법은 객체를 직접 조작하고 객체를 추출하여 특성을 배열로 변환하는 프로세스를 피합니다.

3. 요약

PHP에서 Array_Column은 다차원 배열에서 지정된 열을 추출하기에 매우 편리한 기능입니다. 그러나 다양한 객체에서 속성을 추출하려고 할 때 Array_Column은 배열 기반 작업 만 지원하므로 직접 작동하지 않습니다. 객체를 배열로 변환하거나 익명 함수와 함께 Array_Map을 사용 하여이 문제를 해결할 수 있습니다.

이 기사가 객체를 처리 할 때 오류를 피하면서 Array_Column을 더 잘 이해하고 사용하는 데 도움이되기를 바랍니다.