duch4ever
30.09.2010, 15:04:15
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
30.09.2010, 15:31:11
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
30.09.2010, 15:33:50
const VALUE_A = 1;
const VALUE_B = 2;
const VALUE_C = 4;
const VALUE_D = 8;
$checked = VALUE_A | VALUE_C | VALUE_D; // 13
if ($checked & VALUE_A) {
// opcja a zaznaczona
}
Analogicznie robi się resztę.
duch4ever
30.09.2010, 15:49:12
Ja lecę w pętli po czeckboxach, czyli przy danym mam jego flagę i sumę flag wszystkich i z tego mam wyliczyć
jesus61
1.10.2010, 08:59:57
To może tak:
$suma = 11; // przykładowo
$suma_bin = strrev(decbin($suma)); // zamieniamy na kod binarny i odwracamy
for ($i=0; $suma_bin[$i]!=''; $i++)
{
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 }
nospor
1.10.2010, 09:02:01
Pisałem o tym tutaj:
http://nospor.pl/opcje-dwuwartosciowe-przechowywanie.htmlMasz tam to wszystko opisane włącznie z działajacym przykładem do ściągnięcia