爱好者 > Typecho > 代码相关 > php二维数组随机排序

php二维数组随机排序

作者:佚名 来源:爱好者 时间:2020-08-14

通过查询文档指导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);
?>