我有一个包含30个元素的数组,如下所示:
$array = ["1","2",....,"29","30"];
在10行的表上,我需要将这些元素分布在行中,其中每一行从数组中获取三个随机元素,而不必重复每一行中的元素。
如何在PHP中完成此操作?
感谢您的回答,它非常有帮助。经过多次试验,我编写了以下代码:
<?
$array1 = ['one', 'two', 'three', 'four', 'five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen'];
function RandomArrayNew($array){
$keyrandom = array_rand($array, 3);
$a= $array[$keyrandom[0]];
$b= $array[$keyrandom[1]];
$c= $array[$keyrandom[2]];
$t = [$a, $b, $c];
return $t;
}
?>
<table style="width: 100%" class="bodymenu">
<?
$countRows = 5;
for ($i = 0; $i <= $countRows; $i++){
$x = RandomArrayNew($array1);
$y =array_diff($array1, [$x[0], $x[1], $x[2]]);
echo "<tr>";
echo"<td><input type='text' value='".$x[0]."'/></td>";
echo"<td><input type='text' value='".$x[1]."'/></td>";
echo"<td><input type='text' value='".$x[2]."'/></td>";
echo "</tr>";
}
?>
</table>
此代码实际上通过for循环绘制5行,并且在每行中随机分布三个数字。问题是分配的数字重复。我需要防止行之间重复的数字。是否可以取消从原始数组分配的数字并在下一行中使用新数组?如果是的话,我该怎么办?
答案 0 :(得分:1)
随机排列数组并将其分成三个块:
$numbers = range(1, 30);
shuffle($numbers);
$chunks = array_chunk($numbers, 3);
$chunks
的示例输出:
Array
(
[0] => Array
(
[0] => 22
[1] => 29
[2] => 3
)
[1] => Array
(
[0] => 19
[1] => 13
[2] => 30
)
[2] => Array
(
[0] => 16
[1] => 5
[2] => 27
)
[3] => Array
(
[0] => 25
[1] => 10
[2] => 9
)
[4] => Array
(
[0] => 11
[1] => 17
[2] => 20
)
[5] => Array
(
[0] => 23
[1] => 4
[2] => 28
)
[6] => Array
(
[0] => 6
[1] => 12
[2] => 15
)
[7] => Array
(
[0] => 7
[1] => 21
[2] => 26
)
[8] => Array
(
[0] => 8
[1] => 2
[2] => 24
)
[9] => Array
(
[0] => 18
[1] => 1
[2] => 14
)
)
答案 1 :(得分:1)
一个一般的想法是获得一个随机数并拼接一个数组。数组将变小,下次您再次拼接时,将无法选择相同的元素。但是,通过这种方式,您正在修改原始数组,因此在进行后续操作之前,请先复制原始数组。
function giveMeRandom(array &$arrayAsRef) {
if (!$arrayAsRef) {
return null;
}
// Splice a random element between 0 and size of array - 1, and return it
return array_splice($arrayAsRef, mt_rand(0, count($arrayAsRef) - 1), 1)[0];
}
$myArr = range(1, 30);
var_dump(giveMeRandom($myArr));
var_dump(giveMeRandom($myArr));
var_dump(giveMeRandom($myArr));
当然,您可以修改此函数以一次返回一个包含3个元素的数组。
答案 2 :(得分:0)
欢迎来到Stackoverflow
要获得帮助,您必须提供您尝试过的一些代码示例
因为您是新手,所以这里有一个片段应该可以完成工作
$array = range(1, 30);
$countRows = 10;
$countToPickByRow = 3;
if ($countToPickByRow > count($array)) {
throw new \Exception('Impossible');
}
$rows = [];
for($i = 0; $i <= $countRows; $i++) {
$row = [];
while ($countToPickByRow !== count($row)) {
$random = $array[array_rand($array)];
if (!in_array($random, $row)) { // If random value is'nt present, let's add it to my row
$row[] = $random;
}
}
$rows[] = $row; // Push generated row to my result rows array
}