如何从数组中随机选择每个元素只选择一次的元素?

时间:2018-06-05 20:09:15

标签: php arrays

以下数组包含比赛的条目。一些参与者比其他参与者表现得更多,因此参与其中的时间也是如此。

例如" 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
)

5 个答案:

答案 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."