PHP 关于随机打乱部分数组顺序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
jrotty
V2EX    PHP

PHP 关于随机打乱部分数组顺序

  •  
  •   jrotty Aug 31, 2020 3383 views
    This topic created in 2068 days ago, the information mentioned may be changed or developed.

    就是一个学生成绩数组,然后按照学生分数总高到低排序,相同分数部分的学生顺序随机排序,我百度了半天没搜到,然后自己瞎弄如下:

    <?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); ?> 

    我想知道,有啥正统的解决方式吗?不要喷我哈,我知道我是真的菜!

    16 replies    2020-09-01 10:56:18 +08:00
    dilu
        1
    dilu  
       Aug 31, 2020
    请先定义一下:相同分数部分的学生顺序随机排序

    顺序?以什么为顺序?

    随机?已经顺序了怎么随机?
    sanggao
        2
    sanggao  
       Aug 31, 2020
    相同分数的为啥要随机排序? 需求挺奇怪的 ,相同分数的自然排序不行吗
    sanggao
        3
    sanggao  
       Aug 31, 2020
    @dilu 他可能想让学生名字(或者 id )随机排序。 但我认为这简直就是奇葩需求,这个随机的意义在哪?
    sadfQED2
        4
    sadfQED2  
       Aug 31, 2020 via Android
    相同分数讲道理不应该用名字的拼音排序么
    jrotty
        5
    jrotty  
    OP
       Aug 31, 2020
    @sanggao 只是那学生分数举个例子哈,只是想知道有没有什么好的方法
    rming
        6
    rming  
       Aug 31, 2020
    用 usort,自定义排序规则
    taozywu
        7
    taozywu  
       Aug 31, 2020
    整理一个新数组,以分数为 key,以 name 为值存一个二维。然后判断 name 中的数组个数大于 1 。就随机下 name 数组。
    Littlesqx
        9
    Littlesqx  
       Aug 31, 2020
    ```PHP
    $all = [
    ['name'=>'zhangsan0', 'score'=>'90'],
    ['name'=>'zhangsan1', 'score'=>'89'],
    ['name'=>'zhangsan2', 'score'=>'89'],
    ['name'=>'zhangsan3', 'score'=>'70'],
    ['name'=>'zhangsan4', 'score'=>'89'],
    ];

    usort($all, function ($left, $right) {
    if ($left['score'] === $right['score']) {
    return rand(-1, 1);
    }

    return $right['score'] <=> $left['score'];
    });

    return $all;

    // press Ctrl+Enter to run
    ```
    jrotty
        10
    jrotty  
    OP
       Aug 31, 2020
    @rming
    @Littlesqx
    感谢两位大佬,我去学习下 usort 函数
    lovecy
        11
    lovecy  
       Aug 31, 2020
    你这个问题,其实就是如何按数组内数据给数组排序,上 stackoverflow 搜一下肯定有
    我搜了一下还蛮多的,给你个关键词
    sort array in array [php]
    lovecy
        12
    lovecy  
       Aug 31, 2020
    找到问题关键字搜寻答案,也是一种能力。面向搜索引擎编程就完事了
    jrotty
        13
    jrotty  
    OP
       Aug 31, 2020
    @lovecy 感谢大佬授人以渔
    jendon
        14
    jendon  
       Aug 31, 2020
    LeetCode 第 384 题-打乱数组。Fisher-Yates 洗牌算法
    依次将数组中的每个元素,与其到末尾[i, n-1]范围内的随机个元素交换,这样已交换过的元素不会再被交换;
    for (int i = 0; i < n; ++i) {
    swap(cur[i], cur[i + rand() % (n - i)]);
    }
    时间复杂度 O(n)
    jendon
        15
    jendon  
       Aug 31, 2020
    只是回答如何打乱数组这步
    enjoyCoding
        16
    enjoyCoding  
       Sep 1, 2020
    抖个机灵 可不可以不随机 用数据的随机性+排序制造出一个必然的随机
    加入我有数据 8 9 5 3 2 1 5 1 5 6 6 4 8 2
    如果我使用冒泡排序 排序之后的数据是按照在数据中出现的次序排序的, 数据中出现的次序是随机的 或者根据数据库入库时间排序 大概率是谁先交卷谁在后面
    如果要求每次排序后的人名顺序都不一样 那我不机灵了...
    About     Help     Advertise     Blog     API     FAQ     Solana     2604 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 12:13 PVG 20:13 LAX 05:13 JFK 08:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86