개발 과정에서 많은 양의 데이터를 처리 할 때 큰 배열을 여러 개의 작은 어레이로 나누는 것이 종종 필요합니다. PHP는 배열 세분화에 매우 유용한 기능 array_chunk ()를 제공합니다. 이 기능은 대형 배열을 여러 개의 작은 배열로 나눌 수 있는데,이 기능은 Pagination, Batch Processing 등과 같은 다양한 시나리오에 적합하지만 Array_Chunk () 는 매우 편리하지만 큰 배열을 처리 할 때 최적화되지 않으면 성능 병단으로 이어질 수 있습니다. 이 기사는 Array_Chunk ()를 효율적으로 사용하는 방법을 소개하고 성능 문제를 피하는 방법을 탐색합니다.
Array_Chunk () 함수는 배열을 여러 개의 작은 배열로 분할하고 작은 배열을 포함하는 2 차원 배열을 반환하는 데 사용됩니다.
기본 구문 :
array_chunk(array $array, int $size, bool $preserve_keys = false): array
$ 배열 : 분할 해야하는 배열.
$ 크기 : 각 작은 배열의 크기.
$ preserve_keys : true 로 설정되면 원래 배열의 키 이름이 유지됩니다. 거짓 이면 키 이름이 다시 표시됩니다.
샘플 코드 :
<?php
$array = range(1, 20); // 포함 된 것을 생성하십시오 1 도착하다 20 배열
$chunked = array_chunk($array, 5);
print_r($chunked);
?>
출력 결과 :
Array
(
[0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
[1] => Array ( [0] => 6 [1] => 7 [2] => 8 [3] => 9 [4] => 10 )
[2] => Array ( [0] => 11 [1] => 12 [2] => 13 [3] => 14 [4] => 15 )
[3] => Array ( [0] => 16 [1] => 17 [2] => 18 [3] => 19 [4] => 20 )
)
이 방법은 작은 배열에 매우 효과적이지만 매우 큰 배열을 다루는 경우 성능 문제가 점차 나타납니다.
배열이 매우 크면 Array_Chunk ()를 사용하면 직접 메모리 사용이 발생하여 성능에 영향을 줄 수 있습니다. 주된 이유는 다음과 같습니다.
메모리 풋 프린트 : Array_Chunk ()는 여러 개의 새 배열 사본을 생성하여 메모리 사용이 급격히 증가 할 수 있습니다.
불필요한 키 이름 재구성 : $ preserve_keys 매개 변수가 False 인 경우 각 작은 배열은 키 이름을 다시 표시하여 추가 계산 오버 헤드를 추가합니다.
큰 배열의 경우 성능 병목 현상은 특히 최적화없이 눈에 띄게 될 수 있으며 프로그램 충돌 또는 느린 응답을 유발할 수도 있습니다.
큰 배열을 처리 할 때 성능 병목 현상을 피하기 위해 다음과 같은 최적화 측정을 수행 할 수 있습니다.
Array_Slice () 함수는 전체 배열을 복사하지 않고 배열에서 서브 어레이를 추출 할 수 있습니다. Array_Chunk () 와 비교하여 Array_Slice ()를 사용하면 필요한만큼 배열에서 데이터의 일부를 처리 할 수 있으므로 전체 대형 배열을 한 번에 처리하는 메모리 사용을 피할 수 있습니다.
최적화 예 :
<?php
$array = range(1, 1000000); // 우리가 수백만의 요소가 많이 있다고 가정 해 봅시다
$chunk_size = 10000; // 각 처리 10000 강요
// 사용 array_slice 큰 배열을 통해 반복하십시오
for ($i = 0; $i < count($array); $i += $chunk_size) {
$chunk = array_slice($array, $i, $chunk_size);
// 거래하십시오 $chunk 데이터,예를 들어, 보내십시오 HTTP 요청 등
// 요청을 가정합니다 URL ~을 위한 https://m66.net/api/data
file_get_contents("https://m66.net/api/data?data=" . urlencode(json_encode($chunk)));
}
?>
Array_Slice ()를 사용하여 큰 배열을 통과 할 때, 고정 크기의 데이터의 일부만 한 번에 처리되어 메모리 사용량을 효과적으로 줄이고 한 번에 너무 많은 데이터를로드함으로써 발생하는 성능 문제를 피할 수 있습니다.
앞에서 언급했듯이 Array_Chunk () 의 Preserve_Keys 매개 변수는 메모리 사용에 영향을 미칩니다. 키 이름을 유지할 필요가 없다면 메모리 사용을 줄이기 위해이 매개 변수를 False 로 설정하는 것이 좋습니다.
<?php
$array = range(1, 1000000);
$chunked = array_chunk($array, 10000, false); // 원래 키 이름이 유지되지 않았습니다
?>
그렇게하면 각 작은 배열의 키 이름이 다시 표시되어 불필요한 메모리 오버 헤드가 줄어 듭니다.
슈퍼 큰 배열의 경우 가장 좋은 방법은 세그먼트에서 처리하는 것입니다. 사이클에서 배치로 데이터를 처리함으로써 큰 배열은 하나씩 처리하기 위해 여러 개의 작은 조각으로 나눌 수있어 메모리 압력을 줄일 수 있습니다.
배치 처리의 예 :
<?php
$array = range(1, 1000000); // 큰 배열
$chunk_size = 50000; // 每批次거래하십시오 50000 个데이터
foreach (array_chunk($array, $chunk_size) as $chunk) {
// 逐批거래하십시오데이터,예를 들어, 시작하십시오 API 묻다
file_get_contents("https://m66.net/api/data?data=" . urlencode(json_encode($chunk)));
}
?>
이 방법은 과도한 데이터가 한 번에 메모리에로드되는 것을 방지하고 프로그램 안정성과 성능을 향상시킬 수 있습니다.
Array_Chunk ()를 사용할 때는 성능 병목 현상을 피하기 위해 큰 배열 처리에 특별한주의를 기울여야합니다. 성능은 다음과 같은 방식으로 최적화 할 수 있습니다.
Array_Slice ()를 사용하여 주문시 배열 세그먼트를 처리하십시오.
불필요한 메모리 오버 헤드를 피하기 위해 Preserve_keys 매개 변수를 합리적으로 설정하십시오.
배치로 데이터를 처리하면 메모리 사용량이 줄어들고 프로그램 효율성이 향상됩니다.
이러한 최적화 방법을 사용하면 대형 어레이를보다 효율적으로 처리하고 높은 부하 환경에서 성능 문제를 피할 수 있습니다.