就是一个学生成绩数组,然后按照学生分数总高到低排序,相同分数部分的学生顺序随机排序,我百度了半天没搜到,然后自己瞎弄如下:
<?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);
?>
我想知道,有啥正统的解决方式吗?不要喷我哈,我知道我是真的菜!
1
dilu 2020-08-31 12:01:50 +08:00
请先定义一下:相同分数部分的学生顺序随机排序
顺序?以什么为顺序? 随机?已经顺序了怎么随机? |
2
sanggao 2020-08-31 12:03:24 +08:00
相同分数的为啥要随机排序? 需求挺奇怪的 ,相同分数的自然排序不行吗
|
4
sadfQED2 2020-08-31 12:05:21 +08:00 via Android
相同分数讲道理不应该用名字的拼音排序么
|
6
rming 2020-08-31 12:08:50 +08:00
用 usort,自定义排序规则
|
7
taozywu 2020-08-31 12:08:56 +08:00
整理一个新数组,以分数为 key,以 name 为值存一个二维。然后判断 name 中的数组个数大于 1 。就随机下 name 数组。
|
8
rming 2020-08-31 12:18:05 +08:00
|
9
Littlesqx 2020-08-31 12:23:42 +08:00
```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 ``` |
11
lovecy 2020-08-31 15:08:13 +08:00
你这个问题,其实就是如何按数组内数据给数组排序,上 stackoverflow 搜一下肯定有
我搜了一下还蛮多的,给你个关键词 sort array in array [php] |
12
lovecy 2020-08-31 15:11:02 +08:00
找到问题关键字搜寻答案,也是一种能力。面向搜索引擎编程就完事了
|
14
jendon 2020-08-31 15:40:02 +08:00
LeetCode 第 384 题-打乱数组。Fisher-Yates 洗牌算法
依次将数组中的每个元素,与其到末尾[i, n-1]范围内的随机个元素交换,这样已交换过的元素不会再被交换; for (int i = 0; i < n; ++i) { swap(cur[i], cur[i + rand() % (n - i)]); } 时间复杂度 O(n) |
15
jendon 2020-08-31 15:44:24 +08:00
只是回答如何打乱数组这步
|
16
enjoyCoding 2020-09-01 10:56:18 +08:00
抖个机灵 可不可以不随机 用数据的随机性+排序制造出一个必然的随机
加入我有数据 8 9 5 3 2 1 5 1 5 6 6 4 8 2 如果我使用冒泡排序 排序之后的数据是按照在数据中出现的次序排序的, 数据中出现的次序是随机的 或者根据数据库入库时间排序 大概率是谁先交卷谁在后面 如果要求每次排序后的人名顺序都不一样 那我不机灵了... |