PHP에서 array_combine () 함수는 두 배열을 연관 배열로 결합하는 데 사용됩니다. 그 중 하나는 키 이름을 제공하고 다른 하나는 해당 값을 제공합니다. 이것은 간단하고 간단한 기능인 것처럼 보이지만 경우에 따라 array_combine ()을 사용하면 키 이름을 덮어 쓰는 데 문제가 발생할 수 있습니다. 이 문제는 일반적으로 기조 이름 배열에 복제가 존재할 때 발생합니다.
먼저 Array_combine () 의 기본 사용 예를 살펴 보겠습니다.
<?php
$keys = ['a', 'b', 'c'];
$values = [1, 2, 3];
$result = array_combine($keys, $values);
print_r($result);
?>
출력 결과 :
Array
(
[a] => 1
[b] => 2
[c] => 3
)
위 코드에서 볼 수 있듯이 Array_combine ()은 제대로 작동합니다. 키 이름 배열 $ 키 와 값 배열 $ 값을 결합하여 새 연관 배열을 반환합니다.
$ 키 어레이에 중복 키 이름이 포함 된 경우 Array_combine ()은 이전 키 값 쌍을 덮어 씁니다. 예를 살펴 보겠습니다.
<?php
$keys = ['a', 'b', 'b'];
$values = [1, 2, 3];
$result = array_combine($keys, $values);
print_r($result);
?>
출력 결과 :
Array
(
[a] => 1
[b] => 3
)
이 예에서 'B' 키 이름이 반복적으로 나타나서 최종 결과가 'b'=> 3 만 보존하고 원래 'b'=> 2가 덮어 씁니다.
이런 종류의 키 이름을 재정의하지 않으려면 다음 방법을 사용할 수 있습니다.
Array_combine ()을 사용하기 전에 array_count_values ()를 사용하여 키 이름 배열에 중복이 있는지 확인할 수 있습니다. 중복이있는 경우 먼저 중복 키 이름 (예 : 접미사 추가 등)을 처리 할 수 있습니다.
<?php
$keys = ['a', 'b', 'b'];
$values = [1, 2, 3];
// 키 이름 배열에 중복이 있는지 확인하십시오.
$keys_count = array_count_values($keys);
foreach ($keys_count as $key => $count) {
if ($count > 1) {
// 키 이름을 복제하기 위해 접미사를 추가하십시오
$keys = array_map(function($item) use ($key) {
return $item === $key ? $key . '_dup' : $item;
}, $keys);
}
}
$result = array_combine($keys, $values);
print_r($result);
?>
출력 결과 :
Array
(
[a] => 1
[b_dup] => 2
[b] => 3
)
이런 식으로, 우리는 키 이름을 덮어 쓰는 문제를 피하고 _dup 접미사와 함께 중복 키 이름이 추가됩니다.
또 다른 방법은 병합 전에 처리하기 위해 Array_Merge ()를 사용하는 것입니다. 병합시 중복 키 이름을 처리 할 수 있습니다. 예를 들어, 무작위 번호 또는 고유 식별자를 키 이름에 추가하여 덮어 쓰기를 피할 수 있습니다.
<?php
$keys = ['a', 'b', 'b'];
$values = [1, 2, 3];
$keys = array_map(function($key) {
return $key . uniqid('_'); // 키 이름을 복제하기 위해 고유 식별자를 추가하십시오
}, $keys);
$result = array_combine($keys, $values);
print_r($result);
?>
출력 결과 :
Array
(
[a] => 1
[b_6434e34d27e85] => 2
[b_6434e34d27e86] => 3
)
이런 식으로, 우리는 키 이름을 무시하는 것을 피하고 각 중복 키 이름에는 고유 식별자가 제공됩니다.
Array_combine ()을 사용하는 경우 키 이름이 중복되면 덮어 쓰기 문제가 발생할 수 있습니다. 이 문제를 피하기 위해 우리는 다음을 수행 할 수 있습니다.
키 이름 배열에 중복이 있는지 확인하십시오. 중복이있는 경우, 덮어 쓰기를 피하기 위해 키 이름을 수정할 수 있습니다.
Array_Merge ()를 사용하여 배열을 병합하고 고유 식별자 추가와 같은 중복 키 이름을 처리하십시오.
이러한 방법을 통해 array_combine () 함수를 사용하면 키 이름이 덮어 쓰는 문제가 발생하지 않도록 할 수 있습니다.