Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Flagi PHP zagadka
duch4ever
post 30.09.2010, 15:04:15
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

Ostrzeżenie: (0%)
-----


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ś?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
toel
post 30.09.2010, 15:31:11
Post #2





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post 30.09.2010, 15:33:50
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  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ę.
Go to the top of the page
+Quote Post
duch4ever
post 30.09.2010, 15:49:12
Post #4





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

Ostrzeżenie: (0%)
-----


Ja lecę w pętli po czeckboxach, czyli przy danym mam jego flagę i sumę flag wszystkich i z tego mam wyliczyć smile.gif
Go to the top of the page
+Quote Post
jesus61
post 1.10.2010, 08:59:57
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 3
Dołączył: 26.09.2010

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował jesus61 1.10.2010, 09:01:42
Go to the top of the page
+Quote Post
nospor
post 1.10.2010, 09:02:01
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 10:26