Eine Ringwarteschlange ist eine lineare Datenstruktur, die die feste Größe des Arrays verwendet. Nachdem der Schwanz der Warteschlange das Ende des Arrays erreicht hat, speichert sie weiterhin Daten vom Kopf des Arrays, um das Recycling des Raums zu realisieren. Dies kann die Probleme der herkömmlichen Warteschlange "Datenübertragung" oder Raumabfälle vermeiden.
Array_Slice ist eine Funktion, die von PHP verwendet wird, um Array -Fragmente abzufangen, und die Syntax ist:
array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
Es kann leicht kontinuierliche Elemente aus einem Array extrahieren. Verwenden Sie es, um verschiedene Fragmente des Arrays abzufangen und sie zusammenzuführen, um den Ringeffekt zu simulieren.
Die spezifische Idee ist:
Angenommen, wir haben ein Array mit fester Größe als Puffer.
Wir müssen n aufeinanderfolgende Elemente aus einem Index lesen. Wenn es weniger als Nelemente vom Index bis zum Ende des Arrays gibt, fangen wir zunächst die verbleibenden Elemente am Schwanz ab und fangen dann weiterhin die verbleibenden Teile vom Kopf ab.
Schließlich werden die beiden Teile zu einem "Ring" -Leswerteffekt verschmolzen.
<?php
// Lesfunktion der Ringwarteschlange
function circularQueueSlice(array $buffer, int $start, int $length): array {
$bufferSize = count($buffer);
$start = $start % $bufferSize; // Stellen Sie sicher, dass der Startpunkt in Reichweite liegt
$endLength = $bufferSize - $start;
if ($length <= $endLength) {
// Fangen Sie einfach einen Absatz ab
return array_slice($buffer, $start, $length);
} else {
// ausstartBis zum Ende des Arrays
$part1 = array_slice($buffer, $start, $endLength);
// aus数组开头截取剩余长度
$part2 = array_slice($buffer, 0, $length - $endLength);
// Zwei Teile verschmelzen
return array_merge($part1, $part2);
}
}
// Beispielpufferdaten
$buffer = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];
// aus索引6Beginnen Sie mit dem Lesen5Elemente,Ringlesung
$result = circularQueueSlice($buffer, 6, 5);
print_r($result);
?>
Ausgangsergebnis:
Array
(
[0] => G
[1] => H
[2] => A
[3] => B
[4] => C
)
Hier startet = 6 beginnt mit 'g' , liest 5 Elemente, liest zuerst 'G', 'H' und liest dann weiterhin 'a', 'b', 'c' vom Kopf.
Ringwarteschlangen eignen sich für Puffermanagement, Aufgabenabfragen, Flusskontrolle und andere Szenarien. Zum Beispiel muss beim Lesen von Protokolldateien ein Cache fester Größe zyklisch verarbeitet werden. Bei der Implementierung eines Schleifenplanungsalgorithmus wird die Aufgabenliste zu dem Zugriff auf sich gezogen.
Wenn Sie PHP für die Verarbeitung von Datenstrom in Kombination mit der Ringabschneidemethode von Array_Slice verwenden, können Sie die Schleifenwarteschlangen mit fester Kapazität effizient verarbeiten.
Die Warteschlangengröße ist festgelegt, und die Einfügungsrichtlinie muss über die Größe hinaus kontrolliert werden, um überschrieben wichtige Daten zu verhindern.
Array_Slice ändert das ursprüngliche Array nicht, sondern gibt ein neues Array zurück.
Es ist notwendig, die Rationalität der Parameter von $ Start und $ Länge zu gewährleisten, um Ausnahmen zu vermeiden.
Weitere Informationen zur Verwendung von PHP-Array-Funktionen finden Sie unter https://gitbox.net/manual/en/function.array-slice.php