2011-03-16 8 views
8

인덱스 된 배열에 새로운 값을 넣을 때 PHP 문서는 [MAX_INDEX + 1] 위치에 어떻게 추가되는지 설명합니다.PHP는 연관 배열에서 순서를 어떻게 추적합니까?

$array[] = 'new value'; 

연관 배열에 새로운 값을 넣을 때

$array['key'] = 'new value'; 

같은 방식으로 작동하지만 문서에서 설명하는 방법이나 이유를 확인하지 못합니다. 순서는 내 구현에서 일관된 것 같지만 순서가 동일하게 유지되는지 확실히 알 수 있습니까? 누구든지 PHP가 백엔드에서 이것을 구현하는 방법을 알고 있습니까?

+2

에서 "모든 해시 테이블입니다" -src/trunk/Zend/zend_hash.c? view = 마크 업). 인덱스는 따로 보관되며,'-> pInternalPointer'는 마지막을 보여줍니다. – mario

+1

아마도 Linked Hash Maps 일뿐입니다. 연결은 해싱에 관계없이 순서를 제공합니다. –

+0

큰 답변! 그냥 내가 뭘 찾고 있었는지! :-) –

답변

0

How are associative arrays implemented in PHP? 일부 통찰력을 줄 수도 있습니다.

PHP 배열은 본질적으로 해시 테이블이므로 배열 순서는 배열 순서에 따라 달라질 때까지 동일하게 유지됩니다.

편집 : 그것은이가을 downvoted지고 나타납니다,

  • "PHP의 연관 배열은 사실의 구현은 ... 나에게 명시 적으로 내가 여기에 아래의 코멘트에 링크 된 소스를 포함 할 수 있도록 "그 소스에서도 How is the PHP array implemented on the C level?

  • 에서"해시 테이블 PHP의 배열 INT 문자열 키 허용 체인화 된 해시 테이블 (O (C) 및 키 충돌에 N O()의 조회)는이. 두 개의 다른 해싱 알고리즘을 사용하여 두 개의 typ에 맞 춥니 다. 같은 해시 키 공간에 es. "

  • 내가 구현 세부 사항은 http://svn.php.net/viewvc/php/php ([zend_hash.c]에서 찾을 수 있습니다 생각 http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html

+6

necromancy에 대해 유감이지만이 대답은 의미가 없습니다. 간단한 해시 테이블 인 경우 항목 순서는 삽입 순서가 아니라 각 키의 해시 값을 기반으로해야합니다. 실제로 해시 테이블이 다른 언어로 동작하는 방식입니다. 그리고 PHP 연관 배열은 삽입 순서를 추적하는 것처럼 보입니다. 그래서 질문은 여전히 ​​열려 있습니다. 어떻게 그럴 수 있죠? 그것은 의지 할 수 있습니까? – Tobia

+0

http://stackoverflow.com/questions/2350361/how-is-the-php-array-implemented-on-the-c-level – n00dle

+0

http://nikic.github.io/2012/03/28/ 이해 -PHP-internal-array-implementation.html – n00dle

2

MAX_INDEX은 실제로 주문과 아무 관련이 없습니다.
당신은

$array[5] = 'new value'; 
$array[1] = 'new value'; 
$array[105] = 'new value'; 
$array[2] = 'new value'; 

및 배열뿐만 아니라 순서를 유지합니다 할 수 있습니다.

PHP 배열은 정렬 된지도이므로 순서를 유지하는지도입니다.
배열 요소는 추가 된 이후에 순서를 유지합니다 (또는 일부 배열 조작 함수에 의해 완전히 수정되었습니다).
그게 전부입니다.

0

나는 ksort에 의존하는 것을 선호합니다. 내 경험에 의하면 배열은 요소 제거를 시작할 때까지 일관성을 유지합니다. 수동으로 정렬하고 원하는 순서로되어 있는지 확인하는 것이 좋습니다.

+0

요소를 제거하는 것이 잘못된 이유는 무엇입니까? –

+0

요소 제거 및 배열 정렬에 문제가 있음을 기억합니다.아마도 내 편에서는 프로그래밍이 좋지 않을지 모르지만, 필자가 의존하고 있다면 배열의 순서를 항상 정의하는 습관을 갖게되었다. – Ryre

관련 문제