Projektowanie stron WWW od podszewki
Losowy artykuł: Przykład manipulacji

Artykuły na każdy temat

[PHP] Rotator

Dodano 13.10.2010r. o 14:32
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 Wink 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($fileserialize($data));
?>
Sama rotacja jest prosta. Lista zadań jest następująca:
  1. Pobranie listy
  2. 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.
  3. Oznaczenie wybranego elementu jako użytego oraz reszty jako gotowych do użycia.
  4. 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 Wink 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($fileserialize($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

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)