PHP에서 Array_Column은 다차원 배열에서 열 값을 추출 할 수있는 일반적으로 사용되는 기능입니다. 일반적으로 Array_Column은 순수한 배열을 처리 할 때 잘 작동하지만 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
)
혼합 배열을 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은 객체의 속성을 균일하게 찾을 수 없으므로 반환 값이 불완전하거나 오류가 발생합니다.
이 문제를 해결하기 위해 다음과 같은 방식으로 혼합 어레이를 처리 할 수 있습니다.
가장 쉬운 방법은 모든 요소를 혼합하는 대신 배열 또는 객체에 통합하는 것입니다. 예를 들어 모든 객체를 배열로 변환합니다.
$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
)
구조를 통합 할 수없는 경우 사용자 정의 기능을 사용하여 객체 유형의 요소를 처리 할 수 있습니다. 예를 들어:
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);
이 방법은 요소가 배열인지 객체인지 여부에 관계없이 이름 속성을 올바르게 추출 할 수 있도록합니다.
Array_Column 은 강력한 도구이지만 혼합 어레이를 다룰 때, 특히 배열 요소가 배열 및 객체의 조합 일 때 몇 가지 문제가 발생합니다. 오류를 피하기 위해 Array_Column을 사용할 때 배열 요소 유형이 통합되거나 다른 방식으로 다른 유형의 데이터를 처리하는 것이 가장 좋습니다. 이러한 방법을 통해 array_column 함수를 더 잘 활용하여 일관되지 않은 데이터 구조로 인한 문제를 피할 수 있습니다.
이 기사가 도움이되기를 바랍니다! 더 많은 질문이 있으시면 계속 논의하십시오!