Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Flagi PHP zagadka
Forum PHP.pl > Forum > PHP
duch4ever
Witam ma checkboxy a ich wartość to kolejne flagi czyli:

checkbox value = 1
checkbox value = 2
checkbox value = 4
checkbox value = 8

itd..

i teraz mam sumę tych flag przy wyniku czyli zaznaczę 1,2 i 4 mam wynik 11 czyli suma.
I teraz jak z tej sumy wyznaczyć które były zaznaczone? W miarę prostą metodą? Dodam że chcę z tego korzystać kilka razy,
ilość checkboxów się zmienia ale zawsze value jest to samo czyli 1,2,4,8,16 itd. Pomoże ktoś?
toel
Zamień na system binarny i zapisz w stringu, który jest tablicą charów.
Teraz leć po tej tablicy i jeśli spotkasz 1 to znaczy, że był checkbox zaznaczony a jak 0 to niezaznaczony
Crozin
  1. const VALUE_A = 1;
  2. const VALUE_B = 2;
  3. const VALUE_C = 4;
  4. const VALUE_D = 8;
  5.  
  6. $checked = VALUE_A | VALUE_C | VALUE_D; // 13
  7.  
  8. if ($checked & VALUE_A) {
  9. // opcja a zaznaczona
  10. }
Analogicznie robi się resztę.
duch4ever
Ja lecę w pętli po czeckboxach, czyli przy danym mam jego flagę i sumę flag wszystkich i z tego mam wyliczyć smile.gif
jesus61
To może tak:
  1. $suma = 11; // przykładowo
  2.  
  3. $suma_bin = strrev(decbin($suma)); // zamieniamy na kod binarny i odwracamy
  4.  
  5. for ($i=0; $suma_bin[$i]!=''; $i++)
  6. {
  7. if ($suma_bin[$i]) echo 'Checkbox '.($i+1).' jest zaznaczony'; // $i + 1 jeżeli liczysz checkboxy od 1, a samo $i gdy liczymy je od 0
  8. }
nospor
Pisałem o tym tutaj:
http://nospor.pl/opcje-dwuwartosciowe-przechowywanie.html
Masz tam to wszystko opisane włącznie z działajacym przykładem do ściągnięcia
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.