php添加随机数组不重复最近5

时间:2015-06-18 03:33:26

标签: php while-loop

我正在尝试重新编写此代码,以便它与将由用户定义的列一起使用。有了这个,我的挑战包括 a)需要从数组中选择随机起始项 b)从原始数组中选择下一个随机颜色,该颜色不等于根据数字选择的最新项目:$ intNotesColumn + 1

我认为嵌套在另一个内部的do-while语句适合这个,但我不确定如何解决这个问题。到目前为止,这是我的代码:

 $metroUIcolors = array( "#A30061", "#8200CC", "008987", "#A05000", "#B85A93", "#C07807", "#E51400", "#297A29" );
 $metroUIcolorsLength = count($metroUIcolors);
 $intNotesColumn = 3; // This will be user-defined later
 // Now I query the SQL database to get my base-code
 if ($result->num_rows > 0) {
// output data of each row
echo '<table border=0 valign=top>'
     . '<tr>'
     . '<td colspan=' . $intNotesColumn . '>' . '<h1>header</h1>' . '</td>' 
     . '</tr>'
     . '<tr>';
$counterRank = 1;
while($row = $result->fetch_assoc()) {
    echo "<td bgcolor=" . $metroUIcolors[rand(0, $metroUIcolorsLength - 1)]. ">" 
             . "<h2>" . $row["username"] . '</h2><br />'
             . "<p class='notes'>" .  $row["notes"] . "</p>"

             . "<p class='footnotes'>"
             . "<br />Last Reset:  " . $row["lastReset"]
             . '<br />Last Update:  ' . $row['lastUpdate'] 
             . '<br />SessionID:  ' . $row["sessionID"] 
             . "<br />Counter = " . $counterRank . "</td>". '</p>';

    if ($counterRank % $intNotesColumn == 0)
    {
      echo '</tr><tr>';
    }
    $counterRank++;
}
     echo '</tr></table>';
} else{
echo "No Notes Found in databases";
}

1 个答案:

答案 0 :(得分:0)

然后,为什么不这样做,一次只挑选一种颜色。您可以使用shuffle(),以便每次都有不同的起始颜色。

<?php
$counterRank = 1;

// shuffle the array
shuffle($metroUIcolors); 

while($row = $result->fetch_assoc()) {
    $rand_color = $counterRank % $metroUIcolorsLength;
     echo "<td bgcolor=" . $metroUIcolors[$rand_color]. ">";

     // everything else

   $counterRank++;
}

?>

如果你坚持按照你所说的方式行事,你可以创建一个数组$colorCount,它将颜色代码作为键并计为值。

<?php
$counterRank = 1;
$colorCount = array_fill_keys($metroUIcolors, 0);

while($row = $result->fetch_assoc()) {
    do {
        $rand_color =  $metroUIcolors[rand(0, $metroUIcolorsLength - 1)];
    } while ($colorCount[$rand_color] > 5);


    echo "<td bgcolor=" . $rand_color. ">";

     // everything else

   $counterRank++;
   $colorCount[$rand_color] += 1;
}

?>