2009-05-20 3 views
4

배열과 해시 PHP의 차이점은 무엇입니까? PHP에서 Array와 Hash의 차이점은 무엇입니까?

배열 : array(1,2,3...)
해시 : 서로 다른 또는 동일한 array(key1=value1, key2=value2, ...)

입니까?

※ 예를 들어 함수 인수를 사용하면 배열이 해시에 효과적입니까?

종래의 언어로 구별하여 사용했기 때문에 의아해합니다.

답변

14

설명하는 것은 모두 배열입니다. 이 둘의 유일한 차이점은 명시 적으로 두 번째 키를 설정한다는 것입니다. 따라서이 키는 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에는 배열이 존재하지 않는 옵션 - 연관 (해시 테이블은 기본적으로) 배열

배열에서 "세"를 제거합니다 이렇게

$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) 

......