PHP 개발에서 Array_Column은 다차원 배열에서 단일 열 데이터를 추출하고 새로운 배열을 반환하는 매우 실용적인 기능입니다. 이 기능은 특히 여러 서브 배열을 포함하는 큰 배열에서 데이터 열에서 데이터를 얻는 데 적합합니다. 그러나 데이터 볼륨이 매우 커지면 Array_Column 의 성능이 병목 현상이되어 프로그램이 느려질 수 있습니다.
이 기사는 대형 배열을 다룰 때 프로그램의 효율성을 향상시키는 데 도움이되는 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
)
이 예에서는 이름 열의 $ 데이터 배열에서 데이터를 추출합니다.
소규모 데이터 세트의 경우 array_column 성능이 일반적으로 허용됩니다. 그러나 수백만 레코드 이상을 처리 할 때 함수 실행 시간이 더 길어질 수 있습니다. 그 이유는 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 에 대한 여러 호출을 피합니다.
메모리 관리는 또한 매우 큰 배열을 다룰 때주의가 필요한 측면입니다. 메모리 소비를 줄이려면 전체 배열을 메모리에로드하는 대신 발전기를 사용하여 배열을 처리 할 수 있습니다.
모든 데이터를 메모리에 한 번에로드하는 대신 발전기는 배열의 각 항목을 단계적으로 반환 할 수 있으며, 이는 빅 데이터를 처리 할 때 매우 유용합니다.
// 생성기를 사용하여 데이터를 단계별로 반환하십시오
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;
}
이 접근법은 전체 배열을 메모리에로드하여 메모리 소비를 줄이지 않습니다.
매우 큰 배열을 처리 할 때 배열을 처리하여 배열을 여러 개의 작은 배치로 나눌 수 있습니다. 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의 압력이 줄어 듭니다.
큰 배열을 처리 할 때 Array_Column 함수는 특히 데이터 볼륨이 매우 큰 경우 성능 병목 현상을 생성 할 수 있습니다. 성능을 최적화하려면 다음 방법을 사용할 수 있습니다.
Array_Column 에 대한 통화 수를 줄이고 한 번에 여러 열을 추출하여 성능을 최적화하십시오.
생성기를 사용하여 배열을 단계별로 처리하여 메모리 소비를 줄입니다.
큰 배열을 배치로 처리하고 한 번에 작은 배치를 작동하여 메모리 및 시간 제약을 피하십시오.
이러한 최적화 전략을 사용하면 큰 배열을 처리 할 때 Array_Column 기능의 성능을 크게 향상시킬 수 있습니다.