застрял здесь с сеткой лото - PullRequest
0 голосов
/ 15 марта 2011

У меня есть сетка с 42 номерами, где я буду использовать функцию rand (), чтобы выбрать числа из сетки и отметить их

пока я придумал

    <?php
    $row="";
    print ("<table border=\"1\">");
    for ($i=0; $i<6; $i++)
        {
        print ("<tr>");
            for ($j=0; $j<7; $j++)
                {
                $random = rand(1,42);
                $row += "(string)$random";
                $som = $som + 1;
                print("<th>".$som);
                }

        ("</tr>");
        }

    print ("</table>");
    print ("$rij");

 // here I'm just testing to see if I can get a list of random numbers 
 for ($i=0; $i<6; $i++){
        $randomNr = rand(1,42);
        echo "$randomNr<br/>";
        }


    ?>

Полагаю, идея состоит в том, чтобы сопоставить числа из функции rand с индексами таблицы. Но я действительно застрял здесь при получении таблицы для преобразования в arra, чтобы я мог сопоставить индекс со случайными числами.

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Вы, вероятно, не так уж и далеко со своей собственной попыткой.Вам просто нужно сгенерировать 6 случайных уникальных чисел и сравнить их.Самый простой способ сделать это - сгенерировать массив с помощью range() и выбрать случайные числа с помощью array_rand() (который на самом деле возвращает индексы, поэтому вам потребуется немного дополнительного кода для получения значений).Тогда вам просто нужно выяснить, находится ли текущее число в выбранном массиве чисел, используя in_array()

Вот пример функции общего случая, которая немного расширяет пример Сондре.Функция в этом примере принимает следующие аргументы: общее количество выбранных случайных чисел, наименьшее число в сетке, наибольшее число в сетке и число в строке в сетке.Функция возвращает сгенерированную исходную таблицу HTML в виде строки.

<?php

function generateHighlightedLotteryTable ($count = 6, $min = 1, $max = 42, $perRow = 7)
{
    // Generate the picked numbers (actually we just get their indexes)
    $nums = array_rand(range($min, $max), $count);

    $output = "<table>\n";

    for ($n = $min; $n <= $max; $n++)
    {
        // get "index" of the number, i.e. $min is the first number and thus 0
        $i = $n - $min;

        if ($i % $perRow == 0)
        {
            $output .= "<tr>";
        }

        // If the current number is picked
        if (in_array($i, $nums))
        {
            $output .= "<td><strong>$n</strong></td>";
        }
        // If the current number hasn't been chosen
        else
        {
            $output .= "<td>$n</td>";
        }

        if ($i % $perRow == $perRow - 1)
        {
            $output .= "</tr>\n";
        }
    }

    // End row, if the numbers don't divide evenly among rows
    if (($n - $min) % $perRow != 0)
    {
        $output .= "</tr>\n";
    }

    $output .= "</table>";

    return $output;
}

echo generateHighlightedLotteryTable();

?>

Я надеюсь, что это то, чего вы пытались достичь.

1 голос
/ 15 марта 2011

Это создаст сетку из 42 чисел и выделит случайное. Если вы хотите выделить больше create и array и сравнить их с переменной rand. В вашем исходном коде вы фактически выполняли функцию rand 42 раза, что, я думаю, непреднамеренно.

РЕДАКТИРОВАТЬ: Или вам нужно было заполнить сетку случайными числами?

$rand = rand(1, 42);

echo "<table>";
for($i = 1;$i <= 42; $i++) {
    if($i%7 == 1) {
        echo "<tr>";
    }
    $print = $rand == $i ? "<strong>" . $i . "</strong>" : $i;
    echo "<td>" . $print . "</td>";
    if($i%7 == 0) {
        echo "</tr>";
    }
}
echo "</table>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...