현재 위치: > 최신 기사 목록> Array_Slice를 사용하여 링 큐를 구현하십시오

Array_Slice를 사용하여 링 큐를 구현하십시오

gitbox 2025-05-26

링 대기열이란 무엇입니까?

링 큐는 배열의 고정 크기를 사용하는 선형 데이터 구조입니다. 대기열의 꼬리가 배열의 끝에 도달 한 후에는 공간의 재활용을 실현하기 위해 배열 헤드에서 데이터를 계속 저장합니다. 이는 기존의 대기열 "데이터 전송"또는 우주 폐기물의 문제를 피할 수 있습니다.

array_slice를 사용하여 링 큐 구현을위한 아이디어

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를 방문하십시오.