>我正在尝试从数组内的元素池中获取一个获胜元素。发生次数较少的元素是获胜者:
$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]。
但是,如果有多个元素共享相同数量的递归,则键最低的元素将始终获胜。理想情况下,这应该是随机的。
因此,在这种情况下,获胜者是具有关键2
或3
的答案,但目前关键2
总是获胜。尊重初始排序的第二个"随机"排序可以解决此问题,但我无法让它工作。
我尝试在排序后使用随机播放:
$winner = shuffle($answer_list_counts)[0];
但是这个解决方案不尊重第一种,它只是随机洗牌整个数组。
使用 array_keys(),您可以在键中搜索特定值。因此,您可以先减少结果,然后再进行随机播放:
$elementsWithLessOccurences = array_keys($answer_list_counts, $answer_list_counts[0]);
$winner = shuffle($elementsWithLessOccurences)[0];
不错的副作用是你得到了实际的元素,而不是它的发生次数......