Php 防止Foreach数组给出相同的值

Php 防止Foreach数组给出相同的值,php,arrays,Php,Arrays,我有这个数组代码 $data = array(); foreach($getAllUserTicketHistoryJson as $value){ $data[$value['user_id']] = number_format((float)($value['total_ticket'] / $getAllTicketRound * 100), 2, '.', ''); } $array=$data; 这将产生输出 array(4) { [4]=> string(5) "16

我有这个数组代码

$data = array();
foreach($getAllUserTicketHistoryJson as $value){
    $data[$value['user_id']] = number_format((float)($value['total_ticket'] / $getAllTicketRound * 100), 2, '.', '');
}
$array=$data;
这将产生输出

array(4) { [4]=> string(5) "16.28" [3]=> string(4) "5.81" [2]=> string(5) "11.63" [5]=> string(5) "66.28" } 
Winner is 5
Winner is 5
Winner is 5
该阵列为用户id,获胜几率为100%

我想展示3个随机的赢家,不重复第一个赢家。意味着如果用户已经赢了,他们就不能再赢了

我创建了这个代码

    $number=rand(0,array_sum($array));
    $starter=0;
    foreach($array as $key => $val)
    {
        $starter+=$val;
        if($number<=$starter)
        {
                $ret=$key;
                break;
        }
    }
for($i=0;$i<3;$i++)
{
    echo 'Winner is '.$ret.'<br/>';
}
问题是,如何在不重复第一个获胜者的情况下,根据他们的机会显示3个获胜者。结果应该是这样的

Winner is 4
Winner is 5
Winner is 2

感谢您的帮助

如果您需要类似的功能,可以在此处进行测试:

它会将你的数组作为一个函数的引用传递给你,所以当你选择了胜利者时,它也会从你的数组中移除,这样就不可能再选择它了

// TEST DATA
$array = [
    4 => '16.28',
    3 => '5.81',
    2 => '11.63',
    5 => '66.28',
];

// GET WINNER
// pass the array by reference, so the winner can be removed (unset) from it
function getWinner(&$array) {
    $number=rand(0,array_sum($array));
    $starter=0;
    foreach($array as $key => $val)
    {
        $starter+=$val;
        if($number<=$starter)
        {
            unset($array[$key]);
            return $key;
        }
    }
}
// GET 3 WINNERS
for($i=0;$i<3;$i++)
{
    echo 'Winner is '.getWinner($array)."\n";
}
//测试数据
$array=[
4 => '16.28',
3 => '5.81',
2 => '11.63',
5 => '66.28',
];
//赢家
//通过引用传递数组,以便可以从中删除(取消设置)获胜者
函数getWinner(&$array){
$number=rand(0,数组_和($array));
$starter=0;
foreach($key=>$val的数组)
{
$starter+=$val;

如果($numberPlease不重新发布。谢谢,这段代码很有效