[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Очередь FIFO
Ypsiliform
Добрый день. Помогите, пожалуйста, создать небольшой пример такой очереди на PHP
Есть JSON файл типа в нем 6 записей:

[
{"t":1390017600,"hot":1,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":2,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":3,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":4,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":5,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":6,"koto":0.028,"rop":0.028}
]

При добавлении 7 записи нужно удалить первую запись
{"t":1390017600,"hot":1,"koto":0.028,"rop":0.028}

Таким образом JSON файлик должен иметь вид
[
{"t":1390017600,"hot":2,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":3,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":4,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":5,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":6,"koto":0.028,"rop":0.028},
{"t":1390017600,"hot":7,"koto":0.028,"rop":0.028}
]

brevis
Примитивнейший вариант:

class JsonQueue
{
private $filePath;

public function __construct($filePath)
{
$this->filePath = $filePath;
}

private function loadQueue()
{
if (!file_exists($this->filePath)) {
return [];
}

$jsonData = file_get_contents($this->filePath);
return json_decode($jsonData, true) ?: [];
}

private function saveQueue($queue)
{
$jsonData = json_encode($queue, JSON_PRETTY_PRINT);
file_put_contents($this->filePath, $jsonData);
}

public function enqueue($record)
{
$queue = $this->loadQueue();
$queue[] = $record;
$this->saveQueue($queue);
}

public function getQueue()
{
return $this->loadQueue();
}

public function dequeue()
{
$queue = $this->loadQueue();

if (empty($queue)) {
return null;
}

$firstElement = array_shift($queue);
$this->saveQueue($queue);

return $firstElement;
}

public function clearQueue()
{
$this->saveQueue([]);
}
}


// Пример использования:

// Создаем очередь

$queue = new JsonQueue('data.json');

// Извлечение первого элемента из очереди
$firstElement = $queue->dequeue();
echo "Извлечен элемент: ";
print_r($firstElement);

// Добавляем новую запись
$queue->enqueue(["t" => 1390017600, "hot" => 7, "koto" => 0.028, "rop" => 0.028]);

// Получаем текущую очередь
$currentQueue = $queue->getQueue();
print_r($currentQueue);

// Очистка очереди
$queue->clearQueue();

https://glot.io/snippets/gyy4xogwfo

_____________
Чатик в телеге
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.