在PHP中,关联数组被实现为哈希表,并具有一些额外的功能。
然而,从技术上讲,关联数组并不等同于哈希表 - 它只是在幕后部分通过哈希表实现。因为它的大多数实现都是一个哈希表,它可以做哈希表可以做的所有事情 - 但它也可以做更多的事情。
例如,可以使用 for 循环遍历关联数组,而哈希表则无法做到这一点。
因此,虽然它们很相似,但关联数组实际上可以做一个超集,就像哈希表可以做的事情一样 - 所以它们并不完全相同。可以将其视为哈希表和额外的功能。
代码示例:
使用关联数组作为哈希表:
$favoriteColor = array();
$favoriteColor['bob']='blue';
$favoriteColor['Peter']='red';
$favoriteColor['Sally']='pink';
echo 'bob likes: '.$favoriteColor['bob']."\n";
echo 'Sally likes: '.$favoriteColor['Sally']."\n";
//output: bob likes blue
// Sally likes pink
循环访问关联数组:
$idTable=array();
$idTable['Tyler']=1;
$idTable['Bill']=20;
$idTable['Marc']=4;
//up until here, we're using the array as a hashtable.
//now we loop through the array - you can't do this with a hashtable:
foreach($idTable as $person=>$id)
echo 'id: '.$id.' | person: '.$person."\n";
//output: id: 1 | person: Tyler
// id: 20 | person: Bill
// id: 4 | person: Marc
特别注意在第二个示例中,每个元素的顺序是如何根据它们输入到数组中的顺序来保持的(Tyler,Bill Marc)。这是关联数组和哈希表之间的主要区别。哈希表在其保存的项之间不保持连接,而PHP关联数组则保持连接(您甚至可以对PHP关联数组进行排序)。