我有一个包含30个元素的数组。我想绘制一个具有5行的表格,并从每行中的数组中随机分配3个元素,而各行之间没有重复的元素。行之间没有重复。我写了下面的代码:
<?
$array1 = rang(1,30);
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 :(得分:0)
我不太确定,您打算取消设置$x[0]
,$x[1]
,$x[2]
或其他变量。我敢肯定,有很多简单的方法可以做到这一点。
但是,为了保留原始代码,我添加了一个$z
数组,您可以在其中推送所需的任何var,然后取消设置所需的任何变量,从而避免重复。您也可以在RandomArrayNew
方法中与其他函数一起完成此操作。
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;
}
$array1 = range(1, 30);
$z = array();
$countRows = 5;
$html = '<table style="width: 100%" class="bodymenu">';
for ($i = 0; $i <= $countRows; $i++) {
$x = RandomArrayNew($array1);
var_dump(!array_search($x[0], $z));
if (array_search($x[0], $z) == false) {
array_push($z, $x[0]);
} else {
unset($x[0]);
}
if (array_search($x[1], $z) == false) {
array_push($z, $x[1]);
} else {
unset($x[1]);
}
if (array_search($x[2], $z) == false) {
array_push($z, $x[2]);
} else {
unset($x[2]);
}
print_r($z);
$y = array_diff($array1, [$x[0], $x[1], $x[2]]);
$html .= "<tr>";
$html .= "<td><input type='text' value='" . $x[0] . "'/></td>";
$html .= "<td><input type='text' value='" . $x[1] . "'/></td>";
$html .= "<td><input type='text' value='" . $x[2] . "'/></td>";
$html .= "</tr>";
}
$html .= '</table>';
echo $html;
您可以看到$z
中没有重复项。
Array
(
[0] => 3
[1] => 16
[2] => 28
[3] => 2
[4] => 30
[5] => 5
[6] => 11
[7] => 13
[8] => 1
[9] => 26
[10] => 21
[11] => 25
[12] => 18
[13] => 20
)
基于此,您可以根据需要编写代码。
答案 1 :(得分:0)
您的代码需要一些清洁,但这是一个使您尝试实现的功能代码:
<?php
function RandomArrayNew($array, $maxValues){
$arraySize = count($array);
$num = $maxValues <= $arraySize ? $maxValues : $arraySize;
$randomKeys = array_rand($array, $num);
$values = [];
if(!is_array($randomKeys)) {
return $values;
}
foreach(array_rand($array, $num) as $rk){
$values[] = $array[$rk];
}
return $values;
}
$array1 = range(1, 30);
$countRows = 5;
for ($i = 0; $i <= $countRows; $i++){
$x = RandomArrayNew($array1, 3);
$y = array_diff($array1, $x);
$array1 = $y; // It remplaces your array1 by the new array to avoid duplicates keys
foreach($x as $tdVal) {
echo "<tr>";
echo"<td><input type='text' value='".$tdVal."'/></td>";
}
echo "_________________</tr>";
}
结果:
<tr>
<td><input type='text' value='2'/></td>
<tr>
<td><input type='text' value='5'/></td>
<tr>
<td><input type='text' value='7'/></td>
</tr>
<tr>
<td><input type='text' value='1'/></td>
<tr>
<td><input type='text' value='9'/></td>
<tr>
<td><input type='text' value='10'/></td>
</tr>
<tr>
<td><input type='text' value='3'/></td>
<tr>
<td><input type='text' value='6'/></td>
<tr>
<td><input type='text' value='12'/></td>
</tr>
<tr>
<td><input type='text' value='4'/></td>
<tr>
<td><input type='text' value='11'/></td>
<tr>
... etc