PHP - 按值升序排序,然后按值随机排序


PHP - Sort by value Ascending then by value Random

>我正在尝试从数组内的元素池中获取一个获胜元素。发生次数较少的元素是获胜者:

$answer_list = [7,7,7,5,4,1,2,2,3,1,3,7,7,4,1,4,5,5,4,5];
$answer_list_counts = array_count_values($answer_list);
asort($answer_list_counts);
array(6) {
  [2]=> 2
  [3]=> 2
  [1]=> 3
  [4]=> 4
  [5]=> 4
  [7]=> 5
}

排序后,获胜元素大多数时候都是 $answer_list_counts[0]。

但是,如果有多个元素共享相同数量的递归,则键最低的元素将始终获胜。理想情况下,这应该是随机的。

因此,在这种情况下,获胜者是具有关键23的答案,但目前关键2总是获胜。尊重初始排序的第二个"随机"排序可以解决此问题,但我无法让它工作。

我尝试在排序后使用随机播放:

$winner = shuffle($answer_list_counts)[0];

但是这个解决方案不尊重第一种,它只是随机洗牌整个数组。

使用 array_keys(),您可以在键中搜索特定值。因此,您可以先减少结果,然后再进行随机播放:

$elementsWithLessOccurences = array_keys($answer_list_counts, $answer_list_counts[0]);
$winner = shuffle($elementsWithLessOccurences)[0];

不错的副作用是你得到了实际的元素,而不是它的发生次数......