1

次のように表示できる「出場者の参加者」の配列があります。

 $all_entrants = array(
    array('username'=>'122', 'number_of_entries'=>1),
    array('username'=>'123', 'number_of_entries'=>4),
    array('username'=>'124', 'number_of_entries'=>3),
    ...
 )

これらのエントリから、 という別の配列を作成する必要があります$draw$draw配列は、対応usernameする回数だけ繰り返されnumber_of_entriesます。したがって、上記の例では、次のようになります。

 $draw = array("122", "123", "123", "123", "123", "124", "124", "124")

後で乱数を生成し、次のようなことで勝者を見つけることができるように、これが必要です$draw[$randomNumber];

ただし、$draw配列からその配列を作成する方法について頭を悩ませることはできません$all_entrants...どんな助けも大歓迎です!

4

8 に答える 8

5

このようなものを探していると思いますか?

$draw = array();
foreach($all_entrants as $entrant) // loop through array with entrants
     for ($i = 0; $i<$entrant['number_of_entries']; $i++) //get number of entries
       $draw[] = $entrant['username']; //add them to the $draw array
于 2013-09-12T09:47:39.440 に答える
2

名前の群れから重みの違うものを選ぶ問題だと思います。多分このような配列

$group = array(
    array('122' => 1),
    array('123'=> 4),
    array('124'=> 3) 
);

最初に重量の合計を計算します。または、すでにわかっている場合もあります

$total_weight = 0;
foreach($group as $weight){
    $total_weight += $weight;
}

次に、0 から $total_weight までの乱数を生成します。0<=$rand_number

$current_total = 0;
foreach($group as $name => $weight){
    if($rand_number <= $current_total)
        return $name;
    $current_total += $weight;
}

--

ところで、私はここにいるのは初めてです。もっと学ぶ必要があります:)

于 2013-09-12T10:18:43.080 に答える
1
$all_entrants = array(
    array('username'=>'122', 'number_of_entries'=>1),
    array('username'=>'123', 'number_of_entries'=>4),
    array('username'=>'124', 'number_of_entries'=>3),
);
$draw = array();
foreach($all_entrants as $entrant) {
    $draw = array_merge(
                      $draw,
                      array_fill(0, $entrant['number_of_entries'], $entrant['username'])
                       );
}
var_dump($draw);
于 2013-09-12T10:03:55.300 に答える
1
<?php
$draw = array();
foreach($all_entrants as $entrant) {
    for($i=0; $i<$entrant['number_of_entries']; $i++) {
        $draw[] = $entrant['username'];
    }
}
于 2013-09-12T09:48:28.047 に答える
1

これをチェックして : -

$result=array();
$all_entrants = array(
    array('username'=>'122', 'number_of_entries'=>1),
    array('username'=>'123', 'number_of_entries'=>4),
    array('username'=>'124', 'number_of_entries'=>3)

 );
foreach($all_entrants as $value)
   for($i=0;$i<$value['number_of_entries'];$i++)
       array_push($result,$value['username']);
echo '<pre>';
print_r($result);

出力:-

Array
(
    [0] => 122
    [1] => 123
    [2] => 123
    [3] => 123
    [4] => 123
    [5] => 124
    [6] => 124
    [7] => 124
)
于 2013-09-12T09:53:43.113 に答える
0
<?php 
$all_entrants = array(
    array('username'=>'122', 'number_of_entries'=>1),
    array('username'=>'123', 'number_of_entries'=>4),
    array('username'=>'124', 'number_of_entries'=>3)
 );

$draw = array();

for ($i = 0; $i < count($all_entrants); $i++) 
{
    $entrants = $all_entrants[$i];
    $name = $entrants["username"];
    $entry_count = $entrants["number_of_entries"];
    for ($j = 0; $j < $entry_count; $j++) $draw[] = $name;
}

print_r($draw);
?>

それが役に立てば幸い。

于 2013-09-12T09:52:06.663 に答える