数组和哈希 PHP 有什么区别?
一个数组:array(1,2,3...)
一个哈希:array(key1=value1, key2=value2, ...)
它们是不同的还是相同的?
※ 例如,函数参数允许数组对哈希有效吗?
因为用传统的语言区分,使用了所以不知所措。
数组和哈希 PHP 有什么区别?
一个数组:array(1,2,3...)
一个哈希:array(key1=value1, key2=value2, ...)
它们是不同的还是相同的?
※ 例如,函数参数允许数组对哈希有效吗?
因为用传统的语言区分,使用了所以不知所措。
您所描述的两件事都是数组。两者之间的唯一区别是您为第二个显式设置键,因此它们被称为关联数组。我不知道您从哪里获得哈希术语(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
)
正如您所料,doingprint $bar['one']
会输出uno
,而$foo[0]
第一个示例中的doing 会输出1
。
就函数而言,PHP 函数在大多数情况下会采用这些数组“类型”中的任何一种并执行您希望它们执行的操作,但有一些区别需要注意,因为某些函数会对您的索引做一些时髦的事情有些不会。通常最好在使用数组函数之前阅读文档,因为它会注意到输出将取决于数组的键。
您应该阅读手册以获取更多信息。
实际上,php 中没有数组——只有关联数组(基本上是一个哈希表)
尝试做
$ar=array("zero","one","two","three","four");
unset($ar[3]);
这样做会从数组中删除“三个”,但您会注意到数组键(数组不是关联的)将保持不变(0,1,2,4) - 在任何普通语言中它都会重新编号键对于“四”到 3。
在引擎 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)
……