현재 위치: > 최신 기사 목록> Array_Column을 사용하여 배열 (부분적으로 배열, 부분 객체)을위한 트랩

Array_Column을 사용하여 배열 (부분적으로 배열, 부분 객체)을위한 트랩

M66 2025-04-28

PHP에서 Array_Column은 다차원 배열에서 열 값을 추출 할 수있는 일반적으로 사용되는 기능입니다. 일반적으로 Array_Column은 순수한 배열을 처리 할 때 잘 작동하지만 Array_Column을 사용하면 배열의 요소가 혼합 유형 인 경우 일부 문제가 발생할 수 있습니다 (즉, 부품은 배열, 부품은 객체입니다).

1. Array_Column 함수의 기본 사용

Array_Column 함수의 기본 사용은 다음과 같습니다.

 array_column(array $input, mixed $column_key, mixed $index_key = null): array
  • $ 입력 : 다차원 입력 배열.

  • $ column_key : 추출 해야하는 열 키 (배열의 키 이름 또는 객체의 속성 이름).

  • $ index_key : 선택 사항, 키 이름을 리턴 결과 배열로 지정하는 데 사용됩니다.

예를 들어 간단한 배열이있는 경우 다음과 같습니다.

 $data = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 3, 'name' => 'Charlie']
];
$names = array_column($data, 'name');
print_r($names);

출력 결과는 다음과 같습니다.

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

2. 혼합 어레이의 문제

혼합 배열을 Array_Column 으로 전달할 때 문제가 발생할 수 있습니다. 즉, 배열에는 배열과 객체가 모두 포함됩니다. 예를 들어, 다음과 같은 혼합 배열이 있다고 가정합니다.

 $data = [
    ['id' => 1, 'name' => 'Alice'],
    (object)['id' => 2, 'name' => 'Bob'],
    ['id' => 3, 'name' => 'Charlie']
];

이 시점에서 array_column 으로 이름 열을 추출하려고하면 문제가 발생합니다.

 $names = array_column($data, 'name');
print_r($names);

현재 출력은 다음과 같습니다.

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

문제의 근원

Array_Column 의 중요한 전제는 배열의 요소가 동일한 구조를 가져야한다는 것입니다. 배열의 요소에 배열과 객체가 모두 포함 된 경우 Array_Column은 배열의 구조 및 객체의 속성에 따라 대상 열을 찾습니다. 그러나 PHP에서는 배열 및 객체에 다르게 액세스됩니다.

  • 배열의 액세스 방법은 키 이름 (예 : $ array [ 'key'] )을 통해입니다.

  • 객체의 액세스 방법은 속성 (예 : $ 객체-> 속성 )을 통한 것입니다.

객체가 혼합 배열에 포함되면 Array_Column은 객체의 속성을 균일하게 찾을 수 없으므로 반환 값이 불완전하거나 오류가 발생합니다.

3. 솔루션

이 문제를 해결하기 위해 다음과 같은 방식으로 혼합 어레이를 처리 할 수 ​​있습니다.

3.1 통합 배열 구조

가장 쉬운 방법은 모든 요소를 ​​혼합하는 대신 배열 또는 객체에 통합하는 것입니다. 예를 들어 모든 객체를 배열로 변환합니다.

 $data = [
    ['id' => 1, 'name' => 'Alice'],
    (object)['id' => 2, 'name' => 'Bob'],
    ['id' => 3, 'name' => 'Charlie']
];

// 객체를 배열로 변환합니다
foreach ($data as &$item) {
    if (is_object($item)) {
        $item = (array)$item;
    }
}

$names = array_column($data, 'name');
print_r($names);

이것은 올바르게 출력됩니다.

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)
3.2 사용자 정의 기능을 사용하여 객체 속성을 추출합니다

구조를 통합 할 수없는 경우 사용자 정의 기능을 사용하여 객체 유형의 요소를 처리 할 수 ​​있습니다. 예를 들어:

 function get_name($item) {
    if (is_object($item)) {
        return $item->name;
    }
    return $item['name'];
}

$data = [
    ['id' => 1, 'name' => 'Alice'],
    (object)['id' => 2, 'name' => 'Bob'],
    ['id' => 3, 'name' => 'Charlie']
];

$names = array_map('get_name', $data);
print_r($names);

이 방법은 요소가 배열인지 객체인지 여부에 관계없이 이름 속성을 올바르게 추출 할 수 있도록합니다.

4. 요약

Array_Column 은 강력한 도구이지만 혼합 어레이를 다룰 때, 특히 배열 요소가 배열 및 객체의 조합 일 때 몇 가지 문제가 발생합니다. 오류를 피하기 위해 Array_Column을 사용할 때 배열 요소 유형이 통합되거나 다른 방식으로 다른 유형의 데이터를 처리하는 것이 가장 좋습니다. 이러한 방법을 통해 array_column 함수를 더 잘 활용하여 일관되지 않은 데이터 구조로 인한 문제를 피할 수 있습니다.

이 기사가 도움이되기를 바랍니다! 더 많은 질문이 있으시면 계속 논의하십시오!