首页 > 解决方案 > 在 PHP 中仅随机播放相同的值关联数组

问题描述

我的数组是

$rank = [
    '20' => 1,
    '30' => 1,
    '40' => 2,
    '50' => 2,
    '60' =>3,
];

预期操作
$rank = ['30' => 1,'20' => 1,'50' => 2,'40' => 2,'60' =>3];

我想要随机排名意味着只有排名 1(值)应该洗牌,后来的排名 2 应该洗牌。后来3等等..如何在PHP中做到这一点?

标签: php

解决方案


  • 第一步可以是在一个数组(比如一个集合)中收集所有值(比如卷号),并按等级很好地分组。

  • 现在,从您的阵列中获取所有独特的排名。

  • 对排名进行排序(跳过这一步,如果排名是连续的,则从 1 开始运行 for 循环)。

  • 循环遍历这个独特的排名,并根据手头的排名获得所有的卷号。

  • Shuffle() 它们并将它们全部添加到您的结果中。

片段:

<?php

function getRandomizedSortedData($ranks){
    $rank_set = [];
    foreach($ranks as $roll_no => $rank){
        if(!isset($rank_set[ $rank ])){
            $rank_set[$rank] = [];
        }
        $rank_set[$rank][] = $roll_no;
    }
    
    $unique_ranks = array_unique($ranks);
    sort($unique_ranks);
    
    $result = [];
    
    foreach($unique_ranks as $rank){
        $roll_nos = $rank_set[$rank];
        shuffle($roll_nos);
        foreach($roll_nos as $roll_no){
            $result[$roll_no] = $rank;
        }
    }
    
    return $result;
}

演示: http ://sandbox.onlinephpfunctions.com/code/86c0ead227a06dda5c048dc9316c53788838bd65


推荐阅读