數組和哈希PHP有什麼區別?PHP中的Array和Hash有什麼區別?
數組:array(1,2,3...)
散列:array(key1=value1, key2=value2, ...)
是它們不同或相同?
※例如,函數參數是否允許數組對散列有效?
因爲我用傳統語言區分它並使用它,所以我感到困惑。
數組和哈希PHP有什麼區別?PHP中的Array和Hash有什麼區別?
數組:array(1,2,3...)
散列:array(key1=value1, key2=value2, ...)
是它們不同或相同?
※例如,函數參數是否允許數組對散列有效?
因爲我用傳統語言區分它並使用它,所以我感到困惑。
你所描述的東西都是數組。兩者之間的唯一區別是您明確設置了第二個密鑰,因此它們被稱爲associative arrays。我不知道你從哪裏得到(Perl?)的哈希術語,但這不是他們在PHP中提到的。
因此,舉例來說,如果你做到這一點:
$foo = array(1,2,3,4,5);
print_r($foo);
輸出將是:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
正如你所看到的,鍵來訪問你把個人價值是爲你創造的,但是在那裏。所以這個數組本質上也是聯想的。數組的另一種「類型」是完全一樣的,除非你明確地說「我想訪問這個值與這個鍵」而不是自動數字索引(儘管你提供的鍵也可以是數字)。
$bar = array('uno' => 'one', 'dos' => 'two');
print_r($bar);
將輸出:
Array
(
[uno] => one
[dos] => two
)
正如你可能然後期待,做print $bar['one']
將輸出uno
,並從第一個例子做$foo[0]
將輸出1
。
至於功能去的,PHP函數將大部分時間採取任何這些陣列的「類型」之一,你想要做什麼他們,但也有區別需要注意的,因爲有些功能會做時髦東西給你的索引,有些則不會。通常最好在使用數組函數之前閱讀文檔,因爲它會記錄輸出取決於數組的鍵。
你應該read the manual欲瞭解更多信息。
在實際中,有在PHP沒有陣列 - 僅存在關聯數組(這基本上是一個哈希表)
嘗試做
$ar=array("zero","one","two","three","four");
unset($ar[3]);
這樣做會從數組中刪除「三」 ,但是您會注意到數組鍵(數組不是關聯的)將保持不變(0,1,2,4) - 在任何常規語言中,它會將「4」的鍵重新編號爲3。
在引擎php中,所有數組(關聯或順序)都是散列表,這是因爲它是讀取單個元素的最快方法。內部有基本的函數來創建和popolate數組:
int zend_hash_init(HashTable *ht, uint nSize,hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent);
int zend_hash_add(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)
int zend_hash_update(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)
int zend_hash_index_update(HashTable *ht, ulong h, void *pDate, uinit nDataSize, void **pDest)
int zend_hash_next_index_insert(HashTable *ht, void *pData, uinit nDataSize, void **pDest)
int zend_hash_add(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)
int zend_hash_update(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)
int zend_hash_index_update(HashTable *ht, ulong h, void *pDate, uinit nDataSize, void **pDest)
int zend_hash_next_index_insert(HashTable *ht, void *pData, uinit nDataSize, void **pDest)
......
加UNO:P .. – alex 2009-05-20 01:51:23