PHP에서 Array_Column ()은 다차원 배열에서 지정된 열에서 데이터를 추출하여 반환 할 수있는 매우 일반적인 기능입니다. 이 기능은 특히 구조화 된 데이터와 유사한 데이터베이스 쿼리 결과 또는 배열을 처리하는 데 특히 적합합니다. 열 키를 지정하면 Array_Column ()은 배열에서 배열에서 모든 데이터를 쉽게 추출 할 수 있습니다.
그러나 많은 개발자가 문제가 발생할 수 있습니다. Array_Column ()을 사용할 때 배열의 인덱스 키가 반복되면 어떻게됩니까? 이 기사에서는이 문제를 탐색하고 솔루션을 제공 할 것입니다.
array_column () 함수의 기본 사용량은 다음과 같습니다.
array_column(array $input, $column_key, $index_key = null): array
$ 입력 : 입력 2 차원 배열.
$ column_key : 추출 할 열의 키 이름 또는 열의 인덱스.
$ index_key : 선택 사항입니다. 배열을 반환하는 인덱스 키를 지정할 수 있습니다.
이 함수는 주어진 열 키 $ column_key를 기반으로 데이터를 추출하고 새 배열을 반환합니다. $ index_key가 지정되면 반환 된 배열은이 키를 색인으로 사용합니다.
예를 들어:
$data = [
['id' => 1, 'name' => 'Alice', 'age' => 23],
['id' => 2, 'name' => 'Bob', 'age' => 24],
['id' => 3, 'name' => 'Charlie', 'age' => 25],
];
$names = array_column($data, 'name'); // ['Alice', 'Bob', 'Charlie']
$ index_key 매개 변수가 지정되면 array_column ()은 $ index_key 값을 인덱스로 사용하여 새 배열을 반환합니다. 입력 배열의 $ index_key 키가 반복되면 후속 값은 이전 값을 덮어 씁니다. 이러한 상황은 종종 일부 데이터가 손실 될 수 있기 때문에 개발자를 혼란스럽게합니다.
예를 살펴 보겠습니다.
$data = [
['id' => 1, 'name' => 'Alice', 'age' => 23],
['id' => 2, 'name' => 'Bob', 'age' => 24],
['id' => 1, 'name' => 'Charlie', 'age' => 25], // id 반복하다
];
$result = array_column($data, 'name', 'id');
print_r($result);
산출:
Array
(
[1] => Charlie
[2] => Bob
)
위의 코드에서, ID 키의 복제로 인해 ( ID 값은 1), "Charlie" 만 반환 된 배열에 보관되며 원래 "Alice" 값은 덮어 씁니다. 이것은 중복 인덱스를 만날 때 Array_column () 이 동작하는 방식입니다.
경우에 따라 모든 중복 인덱스를 덮어 쓰는 대신 유지하려고 할 수도 있습니다. 이 시점에서 우리는이 상황을 다루기 위해 몇 가지 트릭을 사용할 수 있습니다.
쉬운 방법은 array_column () 함수가 결과를 반환 한 후 중복 인덱스를 수동으로 처리하는 것입니다. 예를 들어, array_merge ()를 사용하여 동일한 인덱스의 값을 배열로 병합 할 수 있습니다.
$data = [
['id' => 1, 'name' => 'Alice', 'age' => 23],
['id' => 2, 'name' => 'Bob', 'age' => 24],
['id' => 1, 'name' => 'Charlie', 'age' => 25], // id 반복하다
];
$column = array_column($data, 'name', 'id');
// 处理반복하다索引,确保所有반복하다的值被保留
$column = array_map(function($v) {
return is_array($v) ? $v : [$v];
}, $column);
print_r($column);
산출:
Array
(
[1] => Array
(
[0] => Alice
[1] => Charlie
)
[2] => Array
(
[0] => Bob
)
)
이 예에서는 array_map ()을 사용하여 각 값을 배열로 변환하여 모든 값이 보존되도록합니다.
모든 중복 값을 배열로 병합하려면 배열에서 조작하여이를 수행 할 수도 있습니다. 예를 들어, 다음 코드는 Array_Merge를 사용하여 중복 인덱스를 병합합니다.
$data = [
['id' => 1, 'name' => 'Alice', 'age' => 23],
['id' => 2, 'name' => 'Bob', 'age' => 24],
['id' => 1, 'name' => 'Charlie', 'age' => 25], // id 반복하다
];
$result = [];
foreach ($data as $item) {
$result[$item['id']][] = $item['name'];
}
print_r($result);
산출:
Array
(
[1] => Array
(
[0] => Alice
[1] => Charlie
)
[2] => Array
(
[0] => Bob
)
)
이러한 방식으로 데이터를 잃지 않고 중복 인덱스를 처리하는 방법을 수동으로 제어 할 수 있습니다.
Array_Column () 은 배열에서 지정된 열에서 데이터를 추출하는 데 도움이되는 강력한 도구입니다. 그러나 배열에 중복 인덱스 키가 있으면 후속 값이 이전 값을 덮어 씁니다.이 값은 데이터 손실로 이어질 수 있습니다. 이 상황을 처리하기 위해 중복 값을 병합하거나 배열 기능을 사용하여 결과를 추가 처리하는 등 다양한 접근 방식을 취할 수 있습니다. 특정 요구에 따라 중복 인덱스 키의 문제를 해결하기위한 올바른 전략을 선택하면 코드를보다 강력하고 신뢰할 수 있습니다.