Parę dni temu zostałem poproszony o pomoc w stworzeniu rotatora, który będzie wyświetlał
obiekty w kolejności. Oczywiście nie przywykłem do dawania gotowców, dlatego też przygotowałem prosty example. Chodzi mi głównie o przedstawienie mechanizmu działania. Naturalnie dobra koleją rzeczy może być rozbudowanie tego prostego kodu do postaci jakiejś prostej klasy
Struktura danych została przedstawiona w poniższym fragmencie.
Kod:<?php
$data[0]['id'] = 1;
$data[0]['done'] = 1;
$data[1]['id'] = 2;
$data[1]['done'] = 0;
$data[2]['id'] = 3;
$data[2]['done'] = 0;
$file = 'data.txt';
file_put_contents($file, serialize($data));
?>
Sama rotacja jest prosta. Lista zadań jest następująca:
- Pobranie listy
- Wybranie elementu celem wyświetlenia. Jeżeli takowy element nie zostanie wybrany tj. wszystkie elementy zostały już użyte wtedy zostanie wybrany pierwszy element z listy.
- Oznaczenie wybranego elementu jako użytego oraz reszty jako gotowych do użycia.
- Zapisanie wyniku operacji
To w największym skrócie. Oczywiście można się pokusić o drobna optymalizacje i
zerowanie listy może odbyć się od drugiego elementu gdyż wiemy, że w momencie rozpoczęcia nowej kolejki będzie wybrany pierwszy element i oznaczony jako wykorzystany. Przykład jest łopatologiczny aby nie zasady działania
Całość kodu rotatora wygląda mniej więcej tak:
Kod:<?php
$file = 'data.txt';
$data = unserialize(file_get_contents($file));
$how = count($data);
for($h = 0; $h < $how; ++$h)
{
if(!$data[$h]['done'])
{
$data[$h]['done'] = 1;
$catch = $h;
break;
}
}
if(!isset($catch))
{
for($h = 0; $h < $how; ++$h)
{
$data[$h]['done'] = 0;
}
$data[0]['done'] = 1;
$catch = 0;
}
echo $data[$catch]['id'];
file_put_contents($file, serialize($data));
?>
Przykładowy plik
data.txt wygląda mniej więcej tak:
Kod:a:3:{i;a:2:{s:2:"id";i:1;s:4:"done";i:1;}i:1;a:2:{s:2:"id";i:2;s:4:"done";i;}i:2;a:2:{s:2:"id";i:3;s:4:"done";i;}}
Gotowy example można pobrać klękając
tutaj.
Komentarze
Brak komentarzy
Dodaj komentarz
Zezwolono używać:
BBCode
Zabroniono używać:
znaczników HTML