数组和哈希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