php二维数组随机排序

2023-04-17 15:09:53 浏览数 (2)

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

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

代码语言:javascript复制
'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的大佬指点,写法改为

代码语言:javascript复制
'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);
?>

linkCard('.post-content','0');

0 人点赞