防止在php

时间:2019-05-03 20:24:01

标签: php

我有一个包含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行,并且在每行中随机分布三个数字。问题是分配的数字重复。我需要防止行之间重复的数字。是否可以取消从原始数组分配的数字并在下一行中使用新数组?如果可以,我该怎么办?

2 个答案:

答案 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