當按下一個新的值到一個索引數組PHP如何跟蹤關聯數組中的順序?
$array[] = 'new value';
PHP文檔解釋了它如何被在[MAX_INDEX + 1]位置加入。
當推一個新值到一個關聯數組
$array['key'] = 'new value';
它的工作原理是相同的,但我沒有看到任何解釋文件以確認如何或爲何它這樣做。該命令似乎在我的實施中是一致的,但我怎麼知道訂單將保持不變?有誰知道PHP如何在後端實現這一點?
當按下一個新的值到一個索引數組PHP如何跟蹤關聯數組中的順序?
$array[] = 'new value';
PHP文檔解釋了它如何被在[MAX_INDEX + 1]位置加入。
當推一個新值到一個關聯數組
$array['key'] = 'new value';
它的工作原理是相同的,但我沒有看到任何解釋文件以確認如何或爲何它這樣做。該命令似乎在我的實施中是一致的,但我怎麼知道訂單將保持不變?有誰知道PHP如何在後端實現這一點?
How are associative arrays implemented in PHP?可能會給你一些見解。
似乎PHP數組基本上是哈希表,所以數組的順序將保持不變,直到您重新排序爲止(例如,通過對數組進行排序)。
編輯:看來這是越來越downvoted,請允許我明確包括我掛在下面這裏註釋的源...
「PHP關聯數組實際上的實現散列表「從 How is the PHP array implemented on the C level?
又道:」 PHP陣列是鏈式哈希表(O(c)和上鍵衝突爲O(n)的查找),其允許int和字符串鍵它。使用2種不同的哈希算法來適應兩種典型值es轉換爲相同的散列鍵空間。「
「一切都是一個哈希表」,從http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
對不起死靈,但這個答案沒有意義。如果它是一個簡單的散列表,條目的順序應該基於每個鍵的散列值,而不是插入順序。實際上,這就是哈希表在其他語言中的表現。然而PHP關聯數組似乎跟蹤了插入的順序。所以這個問題對我來說還是開放的。它是如何做到的?它可以依賴嗎? – Tobia 2014-07-02 16:58:10
http://stackoverflow.com/questions/2350361/how-is-the-php-array-implemented-on-the-c-level – n00dle 2014-07-03 08:40:22
http://nikic.github.io/2012/03/28/Understanding -PHPs內部陣列-implementation.html – n00dle 2014-07-03 08:41:59
MAX_INDEX實際上與排序無關。
你可以做
$array[5] = 'new value';
$array[1] = 'new value';
$array[105] = 'new value';
$array[2] = 'new value';
和陣列將保留該順序爲好。
PHP數組是一個有序的映射,所以它是保持它的順序的映射。
數組元素只是在添加它們之後保持順序(或者它完全由某個數組操作函數修改)。這就是全部。
我相信實施細則都在[zend_hash.c(http://svn.php.net/viewvc/php/php被發現-src /中繼/ Zend的/ zend_hash.c?視圖=標記)。索引保持獨立我假設,並且' - > pInternalPointer'顯示最後。 – mario 2011-03-16 17:42:20
它們可能只是鏈接哈希映射。鏈接提供順序而不管哈希。 – 2011-03-16 17:54:32
偉大的答案!正是我在找的! :-) – 2015-01-17 18:33:43