对不起,标题.我不知道怎么问这个问题.
我在网站上有一个提出问题的表格.答案是复选框形式.每个答案都以"得分"保存到我的数据库中,值如下所示:
Allergy 1
Cardiology 2
Chest Disease 4
Dermatology 8
Emergency Room 16
Ambulance Trips 32
Gastroenterology 64
General Medicine 128
Gynecology 256
Hematology 512
Neurology 1024
Obstetrics 2048
Opthamology 4096
Orthopedics 8192
Physical Therapy 16384
Plastic Surgery 32768
Podiatry 65536
Proctology 131072
Psychiatry 262144
Surgery Performed 524288
Thoracic Surgery 1048576
Urology 2097152
Outside X-Rays 4194304
Diagnostic Tests (outside) 8388608
Run Code Online (Sandbox Code Playgroud)
如您所见,分数是前两个值的两倍.当用户填写表单时,答案将作为一个值保存在数据库中 - 所有答案一起添加.
例如,用户选择了值:过敏,一般医学,血液学,产科.在数据库中,此问题的答案保存为2689.
有没有办法通过只回答问题来找出选择了哪些答案?
例如,我会查询我的数据库并提取2689值,我需要确定检查了哪些答案.
编辑:我希望用PHP反向设计答案.
您可以通过ANDing以2的幂来查找值.
2 0 = 1
2 1 = 2
2 2 = 4
2 3 = 8
...
2 23 = 8388608
您可以使用二进制移位找出2 n的值,如下所示:1 << n
php代码:
$item[] = {"Allergy", "Cardiology", ..., "Diagnostic Tests (outside)"};
$answer = 2689;
for ( $power = 0; $power < count($item); $power++ ) {
if ( 1 << $power & $answer ) {
echo $item[$power] . "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:使它更加PHP友好