这是我想做的事情: 从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,所以请不要用你的超级黑客技能取笑或打破我的网站!
干杯格雷格
答案 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) }