2011-10-21 48 views
0

this question上工作了很長一段時間之後,我意識到我沒有完全理解uksort是如何在內部工作的,並且找不到任何文檔來達到這種效果。uksort()如何在內部處理數組

處理的值的順序是什麼,當您爲當前比較返回一個整數值時,會爲值停止進一步處理?

+1

在整個數組上運行的大多數(全部?)PHP函數從頭開始並工作到最後,忽略數組指針(像'foreach')。如果您在任何地方調用'return' *,而不考慮上下文,則在該上下文中的進一步處理將停止。我認爲這條規則沒有例外。然而,我並不把這個作爲答案,因爲我不知道這些事情是絕對100%確定的。 – DaveRandom

+0

PHP的開源 - 你可以抓住它,看看uksort的具體實現:http://php.net/downloads.php –

回答

1

值的處理順序取決於解釋器的排序算法。結果是你不應該擔心它;最終結果將是相同的,無論他們處理的是什麼順序(如果您是一副撲克牌,它會以相同的順序結束,無論您是否事先打好籌碼,只要2 < 3J < Q等等)。

除了最天真的排序算法之外,在到達結果數組的最終位置之前,數值將被訪問(「已處理」)數次。當您撥打return時,您提供給uksort,這不一定是最後一次爲這兩個值調用回調。

+0

所以如果我寫一個sort函數,每次比較只返回0,最終結果應該是完全一樣的數組就像在你的撲克牌示例中一樣? –

+1

不一定。一些排序算法是[「穩定的」](http://www.algorithmist.com/index.php/Stable_Sort),即它們將按照給定的順序返回相同的項目,而另一些則不是。至於版本PHP,PHP使用的排序算法並不穩定。 –