程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP關聯數組與哈希表(hash table) 不指定

PHP關聯數組與哈希表(hash table) 不指定

編輯:PHP綜合

PHP中有一種數據類型非常重要,它就是關聯數組,又稱為哈希表(hash table),是一種非常好用的數據結構。

在程序中,我們可能會遇到需要消重的問題,舉一個最簡單的模型:

有一份用戶名列表,存儲了 10000 個用戶名,沒有重復項;

還有一份黑名單列表,存儲了 2000 個用戶名,格式與用戶名列表相同;

現在需要從用戶名列表中刪除處在黑名單裡的用戶名,要求用盡量快的時間處理。

這個問題是一個小規模的處理量,如果實際一點,2 個表都可能很大,比如有 2 億條記錄。

我最開始想到的方法,就是做一個嵌套的循環,設用戶名表有 M 條記錄,黑名單列表有 N 條記錄,那麼,循環的次數是 M * N 次!

PHP 版代碼:

<?php  
foreach($arrayM as $keyM => $nameM) {  
foreach($arrayN as $nameN) {  
if ($nameM == $nameN) {  
// 本行執行了 M * N 次!  
unset($arrayM[$keyM]);  
}  
}  
}  
return $arrayM;  
?>

另一種方式,利用數組索引。

PHP 是一種弱類型的語言,不像 C 語言那樣有嚴格的變量類型限制。C 語言的數組,每一個元素的類型必須一致,而且索引都是從 0 開始。

PHP 的數組,可以用字符串作為索引,也稱為關聯數組。

數組索引,有一個天然的限制就是不會重復,而且訪問的時候不需要查找,可以直接定位。

還是剛才的那個問題,我們采用另一種辦法。

把黑名單列表的用戶名組織到一個數組裡,數組的索引就是用戶名。

然後,遍歷用戶列表的時候,只需直接用 isset 查詢那個用戶名是否存在即可。

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved