2012-07-18 93 views
1

最新最好/最簡單的辦法是:PHP:排序陣列輸出中,但隨機值相同

我有什麼:

array('100', '100', '100', '80', '70', '70', '50', '45'); 

輸出應該是什麼樣子:

100 (random order) 
100 (random order) 
100 (random order) 
80 
70 (random order) 
70 (random order) 
50 
45 
+2

什麼是隨機輸出值相同點? – Leri 2012-07-18 09:24:24

+0

這些值還包括像名稱和圖像這樣的數據,如果這些人沒有相同的值,則應該按照它的值和DESC順序對它們進行隨機排列 – ggzone 2012-07-18 09:28:07

+0

如果它們具有相同的值,那麼'70'先出現在哪裏,這無關緊要嗎? – Fluffeh 2012-07-18 09:32:56

回答

0

根據您的要求,您可以使用usort(http://www.php.net/manual/en/function.usort.php)或uksort。如果值相等,您可以選擇隨機返回正數或負數。

4

你必須使用usort或uasort(uasort保持陣列的鍵)。使用PHP 5.3,你可以做這樣的:

shuffle($array); // randomize 

uasort($array, function($a, $b){ 
    if($a === $b) { 
     return rand(0, 1); 
    } 
    return $a < $b; 
}); 

您可能不得不之前命名功能,如PHP的文檔顯示http://www.php.net/manual/fr/function.uasort.php

+0

這聽起來不錯...我試過了,但輸出不是我的例外:theres沒有隨機現在和排序是:100,100,45,70,70 – ggzone 2012-07-18 11:53:59

+0

是的,你需要一個shuffle()之前使用數組uasort,忘記了對不起:) – 2012-07-18 16:51:28

+1

一個用戶定義的排序函數就足夠了,但是你必須返回-1,0或1,而不是0或1,對於相同的和不同的布爾值!試試這個: '''usort($ this - > _ ads,function($ a,$ d){if a == $ b){ return mt_rand(0,2)-1; } return ($ a> $ b)?-1:1; });''' – 2013-02-01 13:58:52