2012-07-18 117 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