数组和哈希在PHP中有什么区别?
一个数组: array(1,2,3...)
一个哈希: array(key1=value1, key2=value2, ...)
它们是不同的还是相同的?
※ 例如,函数参数是否允许将数组应用于哈希?
因为我通过传统语言进行区分并使用它,所以感到困惑。
数组和哈希在PHP中有什么区别?
一个数组: array(1,2,3...)
一个哈希: array(key1=value1, key2=value2, ...)
它们是不同的还是相同的?
※ 例如,函数参数是否允许将数组应用于哈希?
因为我通过传统语言进行区分并使用它,所以感到困惑。
你所描述的两个东西都是数组。它们之间唯一的区别在于,你明确地为第二个设置了键,并因此被称为关联数组。我不知道你从哪里听到“Hash”这个术语(也许是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函数大多数情况下会接受这些“类型”之一的数组并执行您想要的操作,但需要注意区别,因为某些函数会对索引进行奇怪的处理,而有些则不会。在使用数组函数之前最好阅读文档,因为它会根据数组键说明输出结果。
您应该阅读手册以获取更多信息。
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)
......
$ar=array("zero","one","two","three","four");
unset($ar[3]);