링 큐는 배열의 고정 크기를 사용하는 선형 데이터 구조입니다. 대기열의 꼬리가 배열의 끝에 도달 한 후에는 공간의 재활용을 실현하기 위해 배열 헤드에서 데이터를 계속 저장합니다. 이는 기존의 대기열 "데이터 전송"또는 우주 폐기물의 문제를 피할 수 있습니다.
Array_Slice 는 PHP가 배열 조각을 가로 채기 위해 사용하는 함수이며 구문은 다음과 같습니다.
array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
배열에서 연속 요소를 쉽게 추출 할 수 있습니다. 이를 사용하여 배열의 다른 조각을 가로 채고 병합하여 링 효과를 시뮬레이션하십시오.
구체적인 아이디어는 다음과 같습니다.
버퍼로 고정 크기 배열이 있다고 가정 해 봅시다.
인덱스에서 시작하여 연속 요소를 읽어야합니다. 인덱스에서 배열 끝까지 n 요소가 미만인 경우 먼저 꼬리의 나머지 요소를 가로 채고 나머지 부분을 머리에서 계속 가로 채겠습니다.
마지막으로, 두 부분은 병합되어 "링"판독 효과를 형성합니다.
<?php
// 링 대기열 읽기 기능
function circularQueueSlice(array $buffer, int $start, int $length): array {
$bufferSize = count($buffer);
$start = $start % $bufferSize; // 출발점이 범위 내에 있는지 확인하십시오
$endLength = $bufferSize - $start;
if ($length <= $endLength) {
// 단락을 가로 채기 만하면됩니다
return array_slice($buffer, $start, $length);
} else {
// ~에서start배열 끝까지
$part1 = array_slice($buffer, $start, $endLength);
// ~에서数组开头截取剩余长度
$part2 = array_slice($buffer, 0, $length - $endLength);
// 두 부분을 병합합니다
return array_merge($part1, $part2);
}
}
// 샘플 버퍼 데이터
$buffer = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];
// ~에서索引6읽기 시작하십시오5강요,링 독서
$result = circularQueueSlice($buffer, 6, 5);
print_r($result);
?>
출력 결과 :
Array
(
[0] => G
[1] => H
[2] => A
[3] => B
[4] => C
)
여기에서 시작 = 6은 'g' 에서 시작하고 5 가지 요소를 읽고 먼저 'g', 'h'를 읽은 다음 머리에서 'a', 'b', 'c'를 계속 읽습니다.
링 큐는 버퍼 관리, 작업 폴링, 흐름 제어 및 기타 시나리오에 적합합니다. 예를 들어, 로그 파일을 읽을 때 고정 크기 캐시는 주기적으로 처리되어야합니다. 루프 스케줄링 알고리즘을 구현할 때 작업 목록에 액세스 할 수 있습니다.
Array_Slice 의 링 절단 방법과 결합 된 데이터 스트림 처리에 PHP를 사용하는 경우 고정 용량 루프 큐를 효율적으로 처리 할 수 있습니다.
큐 크기가 고정되어 있으며, 중요한 데이터를 덮어 쓰는 것을 방지하기 위해 삽입 정책을 크기를 넘어 제어해야합니다.
Array_Slice는 원래 배열을 변경하지 않고 새 배열을 반환합니다.
예외를 피하기 위해 $ 시작 및 $ 길이 매개 변수의 합리성을 보장해야합니다.
PHP 배열 기능 사용에 대한 자세한 내용은 https://gitbox.net/manual/en/function.array-slice.php를 방문하십시오.