从int php池创建随机数组

时间:2013-08-23 08:01:45

标签: php arrays shuffle

这是我想做的事情:  从20-30个用户ID列表中创建随机100个值的数组。    我需要让每个用户的数量尽可能相等。 (如果有25个用户,每个将在阵列中有4个点,(100/25 = 4)并且顺序需要是随机的。

作为一个包含10和3个用户ID的数组的示例:     该数组可以读取(3,2,3,1,2,1,2,3,1,2,1)。        这里有三个3,三个2和四个1。       这仍然是尽可能相等,同时仍然填充十个数组。

请帮助我......

这里有一个关于如何部署的模拟 http://fitzpicks.com/squarebet.php

在模型中,我使用电子表格创建的字符串来填充单元格。

P.S。我刚刚开始使用html,css和php,所以请不要用你的超级黑客技能取笑或打破我的网站!

干杯格雷格

3 个答案:

答案 0 :(得分:1)

我认为您的问题可以通过这种简单的方式解决:您需要将ID数组重复到所需的数量,然后再shuffle。可能有一个'尾'(如果total count / count of IDs不是整数) - 为了使随机更好,我建议从原始数组中检索随机ID。这是一个示例:

$rgIds  = [5, 72, 10, 93];
$iCount = 30;

$iLoop    = (int)($iCount/count($rgIds)); //count of repeats
$rgResult = array_intersect_key( //'tail' from random Ids
               $rgIds, 
               array_flip(array_rand($rgIds, $iCount%count($rgIds))));
for($i=0; $i<$iLoop; $i++)
{
   $rgResult=array_merge($rgResult, $rgIds);
}
shuffle($rgResult);

此测试将通过此测试得出:

var_dump($rgResult, array_count_values($rgResult));

在以下输出中:

array(30) {
  [0]=>
  int(93)
  [1]=>
  int(93)
  [2]=>
  int(5)
  [3]=>
  int(93)
  [4]=>
  int(10)
  [5]=>
  int(72)
  [6]=>
  int(10)
  [7]=>
  int(5)
  [8]=>
  int(72)
  [9]=>
  int(10)
  [10]=>
  int(5)
  [11]=>
  int(93)
  [12]=>
  int(72)
  [13]=>
  int(5)
  [14]=>
  int(72)
  [15]=>
  int(10)
  [16]=>
  int(5)
  [17]=>
  int(10)
  [18]=>
  int(93)
  [19]=>
  int(93)
  [20]=>
  int(93)
  [21]=>
  int(72)
  [22]=>
  int(5)
  [23]=>
  int(93)
  [24]=>
  int(72)
  [25]=>
  int(72)
  [26]=>
  int(10)
  [27]=>
  int(5)
  [28]=>
  int(10)
  [29]=>
  int(72)
}
array(4) {
  [93]=>
  int(8)
  [5]=>
  int(7)
  [10]=>
  int(7)
  [72]=>
  int(8)
}

答案 1 :(得分:1)

这是PHP manual entry for shuffle

的示例
<?php
$numbers = range(1, 20);
shuffle($numbers);
foreach ($numbers as $number) {
    echo "$number ";
}
?>

在您的情况下,如果您想要使用初始数组中的值四次,您可以执行以下操作:

$ids = array(101, 102, 109, 110);
$random = array_merge($ids, $ids, $ids, $ids);
shuffle($random);
foreach ($random as $id) {
  echo "$id ";
}

我认为您可以使用$random数组中的前100个项目。

将来,您可以查看所有array functions in the PHP manual的相应功能。

答案 2 :(得分:0)

我认为这就是你所需要的:

$ids = array(1,2,3,4);
$count = 10;

// get number of full sets
$full_sets_number = floor($count/count($ids));

// number of ids in last not full set
$rest_ids_number = $count % count($ids);

// get random ids that will occur more frequently
$rest_ids = $ids;
shuffle($rest_ids);
$rest_ids = array_slice($rest_ids, 0, $rest_ids_number);

// fill result array with ids
$result_array = array();
for($i = 0; $i < $full_sets_number; $i++)
{
    $result_array = array_merge($result_array, $ids);
}
$result_array = array_merge($result_array, $rest_ids);

// shuffle it
shuffle($result_array);

var_dump($result_array);

上面代码的输出是这样的:

array(10) { [0]=> int(4) [1]=> int(2) [2]=> int(1) [3]=> int(1) [4]=> int(3) [5]=> int(1) [6]=> int(4) [7]=> int(4) [8]=> int(2) [9]=> int(3) }