以下数组包含比赛的条目。一些参与者比其他参与者表现得更多,因此参与其中的时间也是如此。
例如" pounho"比乙烯基和#34;有更好的机会。这就是为什么他的出现次数超过" vinylin"在阵列中。
我的问题是如何从以下示例数组中选择3个结果,但结果必须是唯一的,不重复?
因为目前,我可以显示3个结果,但是例如重复
deou, deou, pounho
。
我不想删除重复项。我希望代码考虑到参与者" pounho"比乙烯基和#34;有更好的机会。
Array
(
[0] => pounho
[1] => pounho
[2] => pounho
[3] => panony
[4] => mamich
[5] => Deou
[6] => Deou
[7] => vinylin
[8] => laids
[9] => laids
)
答案 0 :(得分:2)
$inputArray = [...];
$backuppedArray = $inputArray;
$randomlySelected = [];
while(count($randomlySelected) < 3 && count($backuppedArray) > 0){
$randomItem = $backuppedArray[array_rand($backuppedArray)];
if(!in_array($randomItem, $randomlySelected)){
$randomlySelected []= $randomItem;
$backuppedArray = array_diff($backuppedArray, array($randomItem));
}
}
更新的答案,参与者在阵列中的次数越多,他在随机选择中的机会就越多,这是我能想象的最简单的代码
答案 1 :(得分:1)
选择数组的随机元素,然后删除该元素的所有副本。这样做3次以获得3种不同的元素。
$results = array();
for ($i = 0; $i < 3; $i++) {
$index = array_rand($array);
$selected = $array[$index];
$results[] = $selected;
$array = array_diff($array, array($selected));
}
答案 2 :(得分:0)
不确定效率,特别是对于大型阵列,但是;检索前3个值并检查它们是否唯一。如果不是唯一的,请随便再试一次。具有更高频率的值将更有可能位于前3:
while(count($result = array_unique(array_slice($array, 0, 3))) < 3){ shuffle($array); }
答案 3 :(得分:-1)
你需要array_unique
$array2 = array_unique($array);
print_r($array2);
答案 4 :(得分:-1)
此代码段将“排名”数组中的项目:
$count = array_count_values($array); //Counts values and makes new array
arsort($count); //Sort that array high to low
$keys = array_keys($count); //Split the array so we can find the key that occurs the most
echo "The top v is $keys[0][1] with $keys[0][0] occurrences."