php에서 array_diff_key () 는 일반적으로 사용되는 배열 기능입니다. 두 번째 배열에 나타나지 않는 첫 번째 배열에서 두 배열과 리턴 요소를 비교하는 데 사용됩니다. 비교는 값이 아니라 배열의 키를 기반으로합니다. 이렇게하면 많은 응용 프로그램 시나리오에서 특히 키를 기반으로 특정 요소를 삭제해야 할 때 매우 유용합니다.
그러나 대량의 데이터, 특히 수백만 개의 요소 배열로 작업하면 성능에 영향을 줄 수 있습니다. 그렇다면 대규모 배열의 경우 array_diff_key ()가 성능에 영향을 미칩니 까? 다음 에이 문제를 자세히 살펴 보겠습니다.
array_diff_key () 함수의 기본 구문은 다음과 같습니다.
array_diff_key(array $array1, array $array2, array ...$arrays): array
$ array1은 첫 번째 배열을 비교할 배열입니다.
$ array2 및 기타 배열은 $ array1 과 비교하는 데 사용되는 배열입니다.
반환 값은 다른 배열에 있지 않은 $ array1 의 모든 키를 포함하는 새로운 배열입니다.
예를 들어:
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['a' => 4, 'd' => 5];
$result = array_diff_key($array1, $array2);
// 산출: ['b' => 2, 'c' => 3]
위의 예에서는 array_diff_key ()가 $ array2 에 표시되지 않는 $ array1 에서 키 값 쌍을 반환합니다.
Array_Diff_Key () 의 경우, 주요 작업은 두 배열의 키를 비교하고 결과를 저장할 새 배열을 만드는 것입니다. PHP의 배열은 일반적으로 해시 테이블에 의해 구현되므로 배열에 키가 존재하는지 여부를 찾는 작업은 일정한 시간 복잡성 (O (1))입니다. 그러나 큰 배열이 있으면 키의 각 비교 및 해시 조회에는 많은 시간이 걸릴 수 있습니다.
Array_Diff_Key ()는 각 요소에 대한 주요 비교가 필요하므로 N 요소를 포함하는 배열 및 M 요소를 포함하는 배열의 경우 최악의 시간 복잡성은 대략 O (N * M)입니다. 이로 인해 매우 큰 배열의 경우 상당한 성능 문제가 발생할 수 있습니다.
Array_Diff_Key ()가 호출되면 PHP는 결과를 저장하기위한 새 배열을 만듭니다. 두 배열의 크기가 크면이 새로운 배열의 메모리 소비도 증가합니다. 특히 수천 개의 요소가 포함 된 배열을 처리 할 때 많은 메모리를 소비 할 수 있으며, 이는 전체 프로그램의 성능에 영향을 미치고 메모리 오버플로를 유발할 수도 있습니다.
큰 배열에서 특정 키를 제거하고 리턴 값의 순서 또는 구조에 신경 쓰지 않으면 Array_Diff_Key ()를 사용하지 않고 배열을 직접 조작하는 것과 같은 다른 방법을 사용하는 것을 고려하십시오. 예를 들어, unset ()을 사용하여 배열에서 요소를 직접 삭제하거나 Array_Filter ()를 사용하여 배열을 필터링 할 수 있습니다.
예를 들어 $ array1 에서 $ array2 에서 키를 제거하려면 다음과 같이 할 수 있습니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['a' => 4, 'd' => 5];
foreach ($array2 as $key => $value) {
unset($array1[$key]);
}
print_r($array1); // 산출: ['b' => 2, 'c' => 3]
이 접근법은 array_diff_key () 의 비교와 새로운 배열 생성을 피하기 위해 성능을 향상시킬 수 있습니다.
처리 할 배열이 매우 크면 다음 방법을 고려할 수도 있습니다.
병합 어레이 : 일부 시나리오에서 먼저 두 배열을 병합 한 다음 Array_Diff () 또는 Array_Filter ()를 사용하여 불필요한 요소를 삭제할 수 있습니다. 이렇게하면 기능 호출 수가 줄어들 수 있지만 배열 자체를 병합하면 메모리 소비가 추가됩니다.
생성기 사용 : 메모리가 병목 현상이되는 경우 생성기를 사용하여 모든 결과를 메모리에 한 번에로드하지 않고 배열 요소를 하나씩 처리하는 것을 고려하십시오.
Array_diff_key () 는 강력한 도구이지만 큰 배열을 다룰 때, 특히 배열이 매우 큰 경우 성능에 큰 영향을 줄 수 있습니다. 성능이 병목 현상이되면 요소 삭제를 위해 unset () 또는 array_filter ()를 직접 사용하는 등 가벼운 작업을 최적화하거나 사용하려고 시도 할 수 있습니다.
슈퍼 큰 배열에 대한 주요 비교를 피하십시오.
새 배열을 만드는 대신 원래 배열을 직접 수정하는 것이 좋습니다.
데이터 볼륨이 매우 큰 경우 생성기를 사용하여 배열을 단계별로 처리하십시오.
성능 최적화는 항상 대규모 데이터와 관련하여 특별한주의가 필요한 점입니다. 이 기사가 Array_diff_key () 의 성능 영향을 더 잘 이해하고 몇 가지 최적화 아이디어를 제공하는 데 도움이되기를 바랍니다.