結果是 hash_map 性能遠勝 PHP HashTable、PHP HashTable 性能明顯優於 STL Map。(所有結果都在一臺系統是Windows XP、編譯器是Visual Studio 2008、PHP版本是 5.2.14的機器上做的)
詳細結果如下(容器類都含有 10000 條數據,均執行 10000 填充、20000000 次查找操作)
PS:PHP的HashTable是預先分配大小,無法自動增長的。另外2個是自動增長的。
STL Map:41.1736359596 秒
PHP HashTable: 8.20506501198 秒
hash_map: 0.0426259040833 秒
另外,map 以及 hash_map 的均爲MS實現,不代表在其它平臺上的結果。 測試的源代碼如下:
執行入口:
多次執行:
42.4845600128
8.30684089661
0.0404770374298
41.8795220852
8.63965702057
0.0418040752411
二:怎麼把ThinkPHP的RBAC應用到整個項目
新建一個BaseAction.class.php function _initialize() { header('Content-Type:text/html;charset=utf-8'); // 用戶權限檢查 if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) { import('ORG.Util.RBAC'); if (!RBAC::AccessDecision()) { //檢查認證識別號 if (!$_SESSION [C('USER_AUTH_KEY')]) { //跳轉到認證網關 redirect(PHP_FILE . C('USER_AUTH_GATEWAY')); } // 沒有權限 拋出錯誤 if (C('RBAC_ERROR_PAGE')) { // 定義權限錯誤頁面 redirect(C('RBAC_ERROR_PAGE')); } else { if (C('GUEST_AUTH_ON')) { $this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY')); } // 提示錯誤信息 $this->error(L('_VALID_ACCESS_')); } } } 讓所有的action都繼承這個。 class IndexAction extends BaseAction{三:函數相集合
定義和用法
strrchr() 函數查找字符串在另一個字符串中最後一次出現的位置,並返回從該位置到字符串結尾的所有字符。
如果成失敗,否則返回 false。
語法
strrchr(string,char)
參數 | 描述 |
---|---|
string | 必需。規定被搜索的字符串。 |
char | 必需。規定要查找的字符。如果該參數是數字,則搜索匹配數字 ASCII 值的字符。 |
提示和註釋
註釋:該函數是二進制安全的。
定義和用法
stripos() 函數返回字符串在另一個字符串中第一次出現的位置。
如果沒有找到該字符串,則返回 false。
語法
stripos(string,find,start)
參數 | 描述 |
---|---|
string | 必需。規定被搜索的字符串。 |
find | 必需。規定要查找的字符。 |
start | 可選。規定開始搜索的位置。 |
提示和註釋
註釋:該函數對大小寫不敏感。如需進行對大小寫敏感的搜索,請使用 strpos() 函數。
定義和用法
ucwords() 函數把字符串中每個單詞的首字符轉換爲大寫。
語法
ucwords(string)
參數 | 描述 |
---|---|
string | 必需。規定要轉換的字符串。 |
例子
<?php echo ucwords("hello world"); ?>
輸出:
Hello World