50 lines
1.3 KiB
PHP
50 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
class DataSetReader {
|
|
public array $lines = [];
|
|
private array $currentLines = [];
|
|
|
|
private int $lastReadLineIndex = -1;
|
|
|
|
public function __construct(
|
|
public string $filename,
|
|
) {
|
|
// For now, we only support CSV files, so we can delegate to CsvReader
|
|
$csvReader = new CsvReader($filename);
|
|
$this->readEntireFile($csvReader);
|
|
$this->reset();
|
|
}
|
|
|
|
private function readEntireFile(CsvReader $reader): void
|
|
{
|
|
while ($line = $reader->readNextLine()) {
|
|
$this->lines[] = $line;
|
|
}
|
|
}
|
|
|
|
public function getRandomLine(): array | null
|
|
{
|
|
if (empty($this->currentLines)) {
|
|
return null; // No more lines to read
|
|
}
|
|
$randomNumber = array_rand($this->currentLines);
|
|
$randomLine = $this->currentLines[$randomNumber];
|
|
// Remove the line from the current lines to avoid repetition
|
|
unset($this->currentLines[$randomNumber]);
|
|
$this->lastReadLineIndex = array_search($randomLine, $this->lines, true);
|
|
return $randomLine;
|
|
}
|
|
|
|
public function reset(): void
|
|
{
|
|
$this->currentLines = $this->lines;
|
|
}
|
|
|
|
public function getLastReadLineIndex(): int
|
|
{
|
|
return $this->lastReadLineIndex;
|
|
}
|
|
}
|