현재 위치: > 최신 기사 목록> 큰 배열에서 Array_Column 사용을위한 성능 최적화 팁

큰 배열에서 Array_Column 사용을위한 성능 최적화 팁

M66 2025-05-11

PHP 개발에서 Array_Column은 다차원 배열에서 단일 열 데이터를 추출하고 새로운 배열을 반환하는 매우 실용적인 기능입니다. 이 기능은 특히 여러 서브 배열을 포함하는 큰 배열에서 데이터 열에서 데이터를 얻는 데 적합합니다. 그러나 데이터 볼륨이 매우 커지면 Array_Column 의 성능이 병목 현상이되어 프로그램이 느려질 수 있습니다.

이 기사는 대형 배열을 다룰 때 프로그램의 효율성을 향상시키는 데 도움이되는 Array_Column 성능을 최적화하는 몇 가지 방법을 소개합니다.

1. Array_Column 의 기본 사용을 이해하십시오

먼저 Array_Column 의 기본 사용법을 간단히 검토해 봅시다. 2 차원 배열이 있고 특정 열의 데이터를 추출하려고한다고 가정하면 Array_Column을 통해이를 구현할 수 있습니다.

 $data = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 3, 'name' => 'Charlie'],
];

$names = array_column($data, 'name');
print_r($names);

산출:

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

이 예에서는 이름 열의 $ 데이터 배열에서 데이터를 추출합니다.

2. 큰 배열을 처리 할 때 성능 문제

소규모 데이터 세트의 경우 array_column 성능이 일반적으로 허용됩니다. 그러나 수백만 레코드 이상을 처리 할 때 함수 실행 시간이 더 길어질 수 있습니다. 그 이유는 array_column이 각 행을 가로 지르고 찾아서 추출하기 때문에 큰 배열에서 매우 시간이 많이 걸리는 프로세스입니다.

3. 최적화 솔루션 1 : Array_Column에 대한 여러 호출을 피하십시오

큰 배열에서 여러 열을 추출 해야하는 경우 array_column 에 대한 통화 수를 줄이는 것을 고려하십시오. 예를 들어, 한 번에 하나의 열과 다른 열을 다시 추출하지 마십시오. 대신 Array_Map을 사용하여 원하는 여러 열을 한 번에 추출 할 수 있습니다.

 // 여러 열을 추출하십시오
$data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 30],
    ['id' => 2, 'name' => 'Bob', 'age' => 25],
    ['id' => 3, 'name' => 'Charlie', 'age' => 35],
];

// 필요한 모든 열을 한 번에 추출하십시오
$columns = array_map(function($item) {
    return [$item['name'], $item['age']];
}, $data);

print_r($columns);

이 메소드는 한 번에 트래버스하여 여러 열을 얻고 Array_Column 에 대한 여러 호출을 피합니다.

4. 최적화 솔루션 2 : 생성기를 사용하여 메모리를 저장하십시오

메모리 관리는 또한 매우 큰 배열을 다룰 때주의가 필요한 측면입니다. 메모리 소비를 줄이려면 전체 배열을 메모리에로드하는 대신 발전기를 사용하여 배열을 처리 할 수 ​​있습니다.

모든 데이터를 메모리에 한 번에로드하는 대신 발전기는 배열의 각 항목을 단계적으로 반환 할 수 있으며, 이는 빅 데이터를 처리 할 때 매우 유용합니다.

 // 생성기를 사용하여 데이터를 단계별로 반환하십시오
function getNames($data) {
    foreach ($data as $item) {
        yield $item['name'];
    }
}

$data = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 3, 'name' => 'Charlie'],
];

// 생성기를 사용하여 이름을 얻으십시오
foreach (getNames($data) as $name) {
    echo $name . PHP_EOL;
}

이 접근법은 전체 배열을 메모리에로드하여 메모리 소비를 줄이지 않습니다.

5. 최적화 솔루션 3 : 배치 처리 및 분할 추출

매우 큰 배열을 처리 할 때 배열을 처리하여 배열을 여러 개의 작은 배치로 나눌 수 있습니다. PHP의 메모리 제한 및 실행 시간 제한은 프로그램 성능에 영향을 줄 수 있으므로 데이터 배치가 좋은 선택입니다.

예를 들어, 배열을 특정 크기로 자르고 각 작은 배치에 Array_Column을 적용한 다음 결과를 병합 할 수 있습니다.

 $data = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 3, 'name' => 'Charlie'],
    // 더 많은 데이터
];

$batchSize = 1000;
$columns = [];

foreach (array_chunk($data, $batchSize) as $chunk) {
    $columns = array_merge($columns, array_column($chunk, 'name'));
}

print_r($columns);

이 방법은 배치 처리를 통해 전체 배열을 한 번에 작동하지 않으므로 메모리 및 CPU의 압력이 줄어 듭니다.

6. 요약

큰 배열을 처리 할 때 Array_Column 함수는 특히 데이터 볼륨이 매우 큰 경우 성능 병목 현상을 생성 할 수 있습니다. 성능을 최적화하려면 다음 방법을 사용할 수 있습니다.

  1. Array_Column 에 대한 통화 수를 줄이고 한 번에 여러 열을 추출하여 성능을 최적화하십시오.

  2. 생성기를 사용하여 배열을 단계별로 처리하여 메모리 소비를 줄입니다.

  3. 큰 배열을 배치로 처리하고 한 번에 작은 배치를 작동하여 메모리 및 시간 제약을 피하십시오.

이러한 최적화 전략을 사용하면 큰 배열을 처리 할 때 Array_Column 기능의 성능을 크게 향상시킬 수 있습니다.