最新最好/最简单的办法是: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
最新最好/最简单的办法是: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
根据您的要求,您可以使用usort(http://www.php.net/manual/en/function.usort.php)或uksort。如果值相等,您可以选择随机返回正数或负数。
尝试是这样的:基于aasort从 http://codepad.org/SzSeUM4u
你必须使用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
这听起来不错...我试过了,但输出不是我的例外:theres没有随机现在和排序是:100,100,45,70,70 – ggzone 2012-07-18 11:53:59
是的,你需要一个shuffle()之前使用数组uasort,忘记了对不起:) – 2012-07-18 16:51:28
一个用户定义的排序函数就足够了,但是你必须返回-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
什么是随机输出值相同点? – Leri 2012-07-18 09:24:24
这些值还包括像名称和图像这样的数据,如果这些人没有相同的值,则应该按照它的值和DESC顺序对它们进行随机排列 – ggzone 2012-07-18 09:28:07
如果它们具有相同的值,那么'70'先出现在哪里,这无关紧要吗? – Fluffeh 2012-07-18 09:32:56