Array_combine은 두 개의 배열, 매개 변수, 첫 번째 배열은 키로, 두 번째 배열은 값으로 수신합니다. 두 배열의 길이가 다르면 경고가 던지고 거짓이 반환됩니다.
$keys = ['name', 'email', 'age'];
$values = ['Alice', '[email protected]', 30];
$result = array_combine($keys, $values);
// 산출:['name' => 'Alice', 'email' => '[email protected]', 'age' => 30]
print_r($result);
전통적인 foreach 쓰기 방법과 비교할 때이 방법은 더 작고 코드를 더 읽을 수 있습니다.
Foreach를 사용하여 연관 배열을 구축하는 일반적인 방법이며 코드는 다음과 같습니다.
$keys = ['name', 'email', 'age'];
$values = ['Alice', '[email protected]', 30];
$result = [];
foreach ($keys as $index => $key) {
$result[$key] = $values[$index];
}
이 접근법의 장점은 유연성이며, 데이터 포맷 또는 특정 값을 건너 뛰는 등 빌드 프로세스 중에 논리적 처리를 추가 할 수 있습니다.
성능 관점에서, Array_combine 은 C 언어로 구현 된 내부 기능이며 소량의 데이터를 다룰 때는 간격이 거의 없습니다. 그러나 큰 배열 (예 : 수천 개의 키 값 쌍)을 다룰 때 일반적으로 설명 보다 약간 더 잘 수행됩니다.
그러나 성능 개선은 규모의 차이가 아니며 일반적으로 수백만 개의 반복에서 분명합니다. 다음은 벤치 마크의 간단한 예입니다 (참조 만) :
$keys = range(1, 100000);
$values = range(100001, 200000);
// 사용 array_combine
$start = microtime(true);
array_combine($keys, $values);
echo 'array_combine: ' . (microtime(true) - $start) . "s\n";
// 사용 foreach
$start = microtime(true);
$result = [];
foreach ($keys as $i => $key) {
$result[$key] = $values[$i];
}
echo 'foreach: ' . (microtime(true) - $start) . "s\n";
대부분의 경우 array_combine은 약간 더 나은 것이지만이 둘의 차이는 5-10%를 초과하지 않습니다.
두 배열의 길이가 같고 데이터 구조가 안정적이라고 확신하는 경우 array_combine을 사용하는 것은 더 똑똑한 선택이며 코드가 짧을뿐만 아니라 오류 확률이 낮습니다.
$userFields = ['id', 'name', 'email'];
$userData = [101, 'John Doe', '[email protected]'];
$user = array_combine($userFields, $userData);
데이터베이스에서 반환 한 배열 및 사용자가 다른 입력과 같은 데이터 불일치 가능성이있는 경우 Foreach를 사용하고 확인 로직을 추가하는 것이 좋습니다.
$result = [];
$minLength = min(count($keys), count($values));
for ($i = 0; $i < $minLength; $i++) {
$result[$keys[$i]] = $values[$i];
}
또는 후속 문제 해결을 위해 로깅 :
if (count($keys) !== count($values)) {
error_log("일관되지 않은 배열 길이: keys(" . count($keys) . "), values(" . count($values) . ")");
}
경우에 따라 체인 처리 전력을 향상시키기 위해 Array_map 및 Array_combine을 동시에 사용할 수 있습니다.
$raw = ['John', '[email protected]', 28];
$keys = ['name', 'email', 'age'];
$user = array_combine($keys, array_map('trim', $raw));
이 방법은 간결하고 데이터 전처리 로직을 중첩합니다.