현재 위치: > 최신 기사 목록> Array_change_key_case ()를 사용할 때 메모리 최적화 전략

Array_change_key_case ()를 사용할 때 메모리 최적화 전략

M66 2025-04-25

php에서 Array_change_key_case ()는 배열 키를 소문자 또는 대문자로 변환하는 데 일반적으로 사용되는 기능입니다. 그러나 큰 배열을 처리해야 할 때이 기능을 사용하면 새로운 배열 사본을 생성하므로 메모리 소비가 크게 발생할 수 있습니다. 최적화에주의를 기울이지 않으면 과도한 메모리 사용 문제가 발생할 수 있습니다. 이 기사는 메모리 사용을 최적화하는 몇 가지 방법을 탐색합니다.

1. array_change_key_case의 기본 사용법 ()

array_change_key_case () 의 기본 구문은 다음과 같습니다.

 array_change_key_case(array $array, int $case = CASE_LOWER): array
  • $ 배열 : 입력 배열.

  • $ CASE : 선택적 매개 변수, 변환의 상단 및 소문자 케이스를 지정하고 Case_Lower (기본값)는 키를 소문자로 변환하고 Case_Upper는 키를 대문자로 변환합니다.

2. 메모리 문제 분석

Array_change_key_case ()는 원래 배열의 모든 키를 포함하는 새 배열을 생성하고 반환하지만 키의 경우가 변환되었습니다. 배열이 매우 커지면 많은 메모리가 필요합니다. 예를 들어:

 $array = ['A' => 1, 'B' => 2, 'C' => 3];
$modifiedArray = array_change_key_case($array, CASE_LOWER);

이 예에서 PHP는 [ 'a'=> 1, 'b'=> 2, 'c'=> 3]를 저장하기 위해 새로운 메모리 공간을 할당하는 반면, 원래 배열의 메모리는 여전히 보존되어 있습니다. 이 추가 메모리 오버 헤드는 큰 배열을 다룰 때 특히 두드러집니다.

3. 메모리 사용을 최적화하는 방법

큰 배열을 처리 할 때 메모리를 저장하기 위해 다음과 같은 최적화 방법을 사용할 수 있습니다.

3.1 원래 배열을 직접 수정하십시오

원래 배열의 키를 유지할 필요가 없다면 새 배열을 만드는 대신 배열을 제자리에 수정할 수 있습니다. 원래 배열을 직접 수정하면 사본 생성의 메모리 소비를 피할 수 있습니다.

 $array = ['A' => 1, 'B' => 2, 'C' => 3];
// 원래 배열을 직접 수정하십시오
foreach ($array as $key => $value) {
    $newKey = strtolower($key);
    unset($array[$key]); // 오래된 키를 삭제하십시오
    $array[$newKey] = $value; // 새 키를 추가하십시오
}

이런 식으로 원래 배열이 수정되고 새 배열이 생성되지 않기 때문에 추가 메모리 소비를 피합니다.

3.2 array_walk () 함수 사용

Array_Walk ()는 각 요소에서 배열에서 작동 할 수 있습니다. Array_Walk () 과 문자열 변환 함수를 결합하면 사본을 작성하지 않고 배열 키를 수정할 수 있습니다.

 $array = ['A' => 1, 'B' => 2, 'C' => 3];
array_walk($array, function(&$value, $key) {
    $newKey = strtolower($key);
    $value = ['key' => $newKey, 'value' => $value];
});

여기서 핵심은 Array_walk ()를 사용하여 원래 배열에서 수정하는 것입니다. Array_Walk () 을 사용하면 배열의 각 요소를 조작하고 요소의 키와 값을 조정할 수 있습니다.

3.3 발전기 사용

Generator는 PHP가 제공하는 효율적인 메모리 관리 방법으로, 많은 양의 데이터를 처리하는 데 특히 적합합니다. 발전기를 사용하여 계산을 지연시키고 메모리를 저장할 수 있습니다.

 function changeKeyCaseGenerator($array, $case = CASE_LOWER) {
    foreach ($array as $key => $value) {
        yield [($case === CASE_LOWER) ? strtolower($key) : strtoupper($key) => $value];
    }
}

$array = ['A' => 1, 'B' => 2, 'C' => 3];
foreach (changeKeyCaseGenerator($array) as $newPair) {
    print_r($newPair);
}

생성기는 많은 메모리를 차지하지 않고 항목별로 배열 항목을 처리하므로 큰 배열에 적합합니다.

3.4 php.ini 설정을 조정합니다

대형 배열을 처리 할 때 프로그램에서 메모리 제한 문제가 여전히 발생하는 경우 PHP의 메모리 제한을 증가시키는 것을 고려할 수 있습니다. php.ini 파일을 수정하거나 코드에서 ini_set ()를 사용하여 메모리 캡을 늘릴 수 있습니다.

 ini_set('memory_limit', '512M'); // 메모리 제한을 증가시킵니다 512MB

그러나이 접근법은 서버에서, 특히 높은 동시성에서 과도한 메모리 사용을 유발할 수 있으므로주의해서 사용해야합니다.

3.5 캐시 사용

프로그램이 종종 동일한 데이터를 처리 해야하는 경우 캐싱 메커니즘 사용을 고려하십시오. 변환 된 배열을 캐싱함으로써 매번 반복 계산을 피할 수 있습니다. Redis 또는 Memcached와 같은 캐싱 솔루션을 사용할 수 있습니다.

 // 당신이 사용한다고 가정합니다 Redis 캐시로
$redis = new Redis();
$redis->connect('m66.net');
$cacheKey = 'transformed_array';
$transformedArray = $redis->get($cacheKey);

if ($transformedArray === false) {
    // 캐시에 데이터가없는 경우,캐시로 변환하고 저장합니다
    $transformedArray = array_change_key_case($array, CASE_LOWER);
    $redis->set($cacheKey, $transformedArray);
}

이것은 중복 메모리 소비를 효과적으로 줄일 수 있습니다.

4. 요약

큰 배열을 처리하는 동안 Array_change_key_case () 는 편리한 기능이지만 추가 메모리를 소비하는 새로운 배열 사본을 만듭니다. 위의 방법을 통해이 기능을 사용할 때 메모리 사용량을 최적화 할 수 있습니다.

  • 원래 배열을 직접 수정하십시오.

  • 복제본 생성을 피하려면 Array_Walk () 를 사용하십시오.

  • 생성기를 사용하여 요청시 데이터를 처리하십시오.

  • PHP의 메모리 설정을 조정하십시오.

  • 캐싱 메커니즘을 사용하여 중복 계산을 줄입니다.

이러한 최적화 방법을 사용하면 큰 배열을 처리 할 때 메모리를 저장하고 응용 프로그램 성능을 향상시키는 데 도움이됩니다.