2009-05-20 8 views
4

ArrayとHash PHPの違いは何ですか?PHPのArrayとHashの違いは何ですか?

配列:array(1,2,3...)
ハッシュ:array(key1=value1, key2=value2, ...)

は、彼らが異なるか、同じですか?

※例えば、関数の引数を指定すると、配列はハッシュに対して有効になりますか?

私は、従来の言語でそれを区別し、それを使用しますので、私は困惑しています。

答えて

14

説明していることは、両方とも配列です。 2つの唯一の違いは、明示的に2番目のキーを設定していることです。そのため、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

+0

プラスUNO:Pは... – alex

+0

muchasグラシアスのセニョール「駆動」だ:) –

+2

内部データ型は、PHPの内部配列を作成し、popolateするための基本的な機能があります配列はHashTableと呼ばれます。 – VolkerK

1

実際には、PHPには配列が存在しない - だけ連想(ハッシュ・テーブルは、基本的である)アレイ

アレイから「3」を除去するようにすること

$ar=array("zero","one","two","three","four"); 
unset($ar[3]); 

やってみあります配列のキー(配列は結合されていない)が同じ(0,1,2,4)のままであることに気付くでしょう - 通常の言語では、 "4"のキーを3に再番号付けします。

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) 

......

関連する問題