如何使用PHP解析配置值,這是一個數字和其他數字的總和。的這個PHP整數配置(例如,1 = apache,2 = php,3 = apache + php)
一個例子是:
1 - >啓用日誌
2 - >錯誤報告啓用
4 - >電子郵件報告啓用
3 - >登錄+錯誤啓用
5 - >日誌記錄+電子郵件已啓用
如何使用PHP解析配置值,這是一個數字和其他數字的總和。的這個PHP整數配置(例如,1 = apache,2 = php,3 = apache + php)
一個例子是:
1 - >啓用日誌
2 - >錯誤報告啓用
4 - >電子郵件報告啓用
3 - >登錄+錯誤啓用
5 - >日誌記錄+電子郵件已啓用
您不僅擁有一筆總和 - 您自己擁有一組標誌或一個位域,每個標誌由一位表示。
$logging = !!($cfgval & 1);
$errorReport = !!($cfgval & 2);
$emailReport = !!($cfgval & 4);
「!!」只是確保不爲0的數字(即:具有特定位集的數字)最終與PHP其餘部分使用的「真」值相同,所以像($logging == true)
這樣的東西總是按預期工作。這不是必需的,但我強烈建議你以某種方式將值轉換爲布爾值; (bool)
也可以工作,即使它是3倍的字符。 :)
只要你保留數字作爲兩個冪(1,2,4,8,16,32 ...),很容易將它擴展到31-32個不同的標誌(整數是32大小的位,但最高位是一個符號位,如果你不知道「2的補數」數學,那麼這樣做的確很有趣)。
問題不清楚給我。這裏以5> 1 + 4爲例。但是5→3 + 2也是可能的。有什麼辦法可以分開組合和單個配置選項/值? – Sadat 2010-07-17 23:58:23
@Sadat:第二行數字是第一行數字的總和,部分是作爲例子。我相信,如何區分價值觀,首先就是他所要求的。 – cHao 2010-07-17 23:59:50
由於@Sadat解釋了什麼,總和將不起作用。 @cHao的答案是要走的路。 – quantumSoup 2010-07-18 00:18:11