通过查询文档指导array_multisort函数可对多个数组或多维数组进行排序,具体文档请看https://www.php.net/manual/zh/function.array-multisort.php,其实我就是粗略的看了下文档(看着头大),发现并没有随机排序。

我的需求时根据二维数组中的某个值进行降序排序,当值相同时随机排序,于是就写出了如下代码,我觉得挺巧妙的故记录下!

<?php
$all=array(
        array('name'=>'zhangsan0','fenshu'=>'90'),
        array('name'=>'zhangsan1','fenshu'=>'89'),
        array('name'=>'zhangsan2','fenshu'=>'89'),
        array('name'=>'zhangsan3','fenshu'=>'70'),
        array('name'=>'zhangsan4','fenshu'=>'89'),
    );
foreach ( $all as $key => $row ){
  $idprice[$key] = $row['fenshu'];
  $r[$key] = rand(1,10);
}
array_multisort($idprice, SORT_DESC, $r, SORT_DESC, $all);
print_r($all);
?>

当然如果你想全部随机可以使用shuffle或者array_rand函数。

2020年08月31日经过v2ex的大佬指点,写法改为

<?php
$all=array(
        array('name'=>'zhangsan0','fenshu'=>'90'),
        array('name'=>'zhangsan1','fenshu'=>'89'),
        array('name'=>'zhangsan2','fenshu'=>'89'),
        array('name'=>'zhangsan3','fenshu'=>'70'),
        array('name'=>'zhangsan4','fenshu'=>'89'),
    );
usort($all, function ($a, $b) {
    if ($a["fenshu"] !== $b["fenshu"]){
        return ($a["fenshu"] > $b["fenshu"])?-1:1;
    }
 return array_rand([-1, 1]) ? 1 : -1;
});

var_dump($all);
?>
版权属于:泽泽社长
本文链接:https://blog.zezeshe.com/archives/php-array-rand.html
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!