Рандомные числа уникальные PHP
Всем привет.
Ребята, есть скрипт пхп который выдаёт массив 16 случайных уникальных чисел без повторов. <?php $limit = 16; $max_num = 5000; $used_nums = array(); while(1) { $random = rand(0, $max_num); if(!in_array($random, $used_nums)) { $used_nums[] = $random; } if(count($used_nums) == $limit) { break; } } var_dump($used_nums); Подскажите, как привязать скрипт к кнопке, что-бы изначально нужно было нажать на кнопку и оно все это выводило, ну а далее все числа просто поместить в таблицу. Заранее благодарен. |
Фух. Получилось кое что сделать.
<form method="POST"> <input type="submit" name="knopka" value="Создать 16 рандомных чисел в диапазоне от 1 до 5000" /> </form> <?php # Если кнопка нажата if( isset( $_POST['knopka'] ) ) { # Тут код який виполянеться $used = array(); while (count($used)<16){ $rand = mt_rand(1,5000); if (!in_array($rand,$used)) { $used[] = $rand; } echo $rand."<br />"; } } ?> Теперь просто поместить все это окуратненько в таблицу числа, как это реализовать? |
Например 3/4 столбца или т.п.
|
Цитата:
|
Цитата:
Осталось эти 16 чисел поместить в ячейки таблицы, только я не могу понять, как это сделать... |
Цитата:
|
А почему оно не будет выполнено?
|
Цитата:
|
Цитата:
А в табличку можно числа засунуть? |
echo '<table><tr>' . implode('</tr><tr>', array_map(function($v) { return '<td>' . implode('</td><td>', $v) . '</td>'; }, array_chunk($used, 4))) . '</tr></table>'; |
Цитата:
Здесь, чтото не так, оно выводит кучу чисел теперь, а не 16 шт. |
array_chunk - разбивает массив на части, то есть если массив имеет 16 значений, значит будет массив с имеющий 4 вложения по четыре элемента. array_map - обходит его соединяя каждое вложение в строку, внешний implode соединит все в одну строку - таблицу, а 4 х 4 = 16.
Можете сразу формировать таблицу (начинать с '<table><tr>' до цикла), не помещая генерируемые числа в массив, а формировать из них строку ('<td>' . $rand . '</td>'), добавляя ее к строке, и деля итератор по модулю 4, добавлять к ней '</tr><tr>'. По окончании цикла закрыть строку - '</tr></table>'. |
Пытаюсь слепить до кучи, все равно не получается, не могу понять до конца, я даже не предпологал, что это так делается
|
Dark_Delphin,
может сделать всё на клиенте? |
создание таблицы из массива уникальных чисел
Dark_Delphin,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> td { text-align: center; border: solid 1px #0000FF; } table { border-collapse: collapse; border: 1px solid #0000FF; width: 300px; } </style> </head> <body> <table></table> <script> Array.prototype.shuffle = function (min, max) { min = min || 0; max = ++max || this.length; var len = max - min; max = len - this.length; this.length = len; for (var a = this.length - 1; 0 <= a; a--) { if (a < max) break; var b = Math.floor(Math.random() * a), c = void 0 === this[b] ? (b + min) : this[b]; this[b] = void 0 === this[a] ? (a + min) : this[a]; this[a] = c } this.reverse(); this.length -= max; return this }; var arr = Array(16).shuffle(1, 5000); var table = document.querySelector("table"); var length = 4, tr; arr.forEach(function (number, indx) { if (indx % length == 0) tr = table.insertRow(indx / length | 0); var td = tr.insertCell(indx % length); td.innerHTML = number }); </script> </body> </html> |
Dark_Delphin, если как ранее писалось - получить не повторяющиеся, то только так:
$a = range(1, 5000); shuffle($a); //перемешанный массив (сохранить в сессии), срезы которого по 16 элементов, со смещением 16, можно выводить по каждому запросу клиента. Либо формируете массив - $a = range(1, 5000);, а затем выбираете случайные значения из него - array_rand($a, 16). В этом случае действительно ни разу гарантированно не будет повторений. А построение таблицы, так это пустяк, потренируйтесь на простом примере. |
Цитата:
|
Конструкция жесткая у меня))
<?php # Если кнопка нажата if( isset( $_POST['knopka'] ) ) { # Тут код який виполянеться ?> <style type="text/css"> td { text-align: center; border: solid 1px #0000FF; } table { border-collapse: collapse; border: 1px solid #0000FF; width: 300px; } </style> </head> <body> <table></table> <script> Array.prototype.shuffle = function (min, max) { min = min || 0; max = ++max || this.length; var len = max - min; max = len - this.length; this.length = len; for (var a = this.length - 1; 0 <= a; a--) { if (a < max) break; var b = Math.floor(Math.random() * a), c = void 0 === this[b] ? (b + min) : this[b]; this[b] = void 0 === this[a] ? (a + min) : this[a]; this[a] = c } this.reverse(); this.length -= max; return this }; var arr = Array(16).shuffle(1, 5000); var table = document.querySelector("table"); var length = 4, tr; arr.forEach(function (number, indx) { if (indx % length == 0) tr = table.insertRow(indx / length | 0); var td = tr.insertCell(indx % length); td.innerHTML = number }); </script> </body> <?php } ?> |
А можно сделать, что-бы изначально чисел не было, как открываешь страницу с кодом рандомных чисел?
|
Dark_Delphin,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> td { text-align: center; border: solid 1px #0000FF; } table { border-collapse: collapse; border: 1px solid #0000FF; width: 300px; } </style> </head> <body> <table class="num"></table> <script> Array.prototype.shuffle = function (min, max) { min = min || 0; max = ++max || this.length; var len = max - min; max = len - this.length; this.length = len; for (var a = this.length - 1; 0 <= a; a--) { if (a < max) break; var b = Math.floor(Math.random() * a), c = void 0 === this[b] ? (b + min) : this[b]; this[b] = void 0 === this[a] ? (a + min) : this[a]; this[a] = c } this.reverse(); this.length -= max; return this }; function addNumber() { var arr = Array(16).shuffle(1, 5000); var table = document.querySelector(".num"); table.innerHTML = ""; var length = 4, tr; arr.forEach(function (number, indx) { if (indx % length == 0) tr = table.insertRow(indx / length | 0); var td = tr.insertCell(indx % length); td.innerHTML = number }); } </script> <input name="" type="button" value="add Number To Table" onclick="addNumber()"> </body> </html> |
Рони, извиняюсь, еще такой вопрос.
Можно ли дать заголовок первым 10 числам и также второй заголовок остальным 6 числам? <style type="text/css"> td { text-align: center; border: solid 1px #0000FF; } table { border-collapse: collapse; border: 1px solid #0000FF; width: 66%; font-size:50px; } </style> <body> <input name="" type="button" value="Сгенерировать 16 уникальных чисел от 1 до 5000" onclick="addNumber()"> <hr /> <table class="num"> <caption>Один месяц без...</caption> </table> <script> Array.prototype.shuffle = function (min, max) { min = min || 0; max = ++max || this.length; var len = max - min; max = len - this.length; this.length = len; for (var a = this.length - 1; 0 <= a; a--) { if (a < max) break; var b = Math.floor(Math.random() * a), c = void 0 === this[b] ? (b + min) : this[b]; this[b] = void 0 === this[a] ? (a + min) : this[a]; this[a] = c } this.reverse(); this.length -= max; return this }; function addNumber() { var arr = Array(16).shuffle(1, 5000); var table = document.querySelector(".num"); table.innerHTML = ""; var length = 10, tr; arr.forEach(function (number, indx) { if (indx % length == 0) tr = table.insertRow(indx / length | 0); var td = tr.insertCell(indx % length); td.innerHTML = number }); } </script> </body> |
Dark_Delphin,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <style type="text/css"> td { text-align: center; border: solid 1px #0000FF; } table { border-collapse: collapse; border: 1px solid #0000FF; width: 66%; font-size:50px; } th{ color: #0000CD; } </style> <body> <input name="" type="button" value="Сгенерировать 16 уникальных чисел от 1 до 5000" onclick="addNumber()"> <hr /> <table class="num"> <caption>Один месяц без...</caption> </table> <script> Array.prototype.shuffle = function (min, max) { min = min || 0; max = ++max || this.length; var len = max - min; max = len - this.length; this.length = len; for (var a = this.length - 1; 0 <= a; a--) { if (a < max) break; var b = Math.floor(Math.random() * a), c = void 0 === this[b] ? (b + min) : this[b]; this[b] = void 0 === this[a] ? (a + min) : this[a]; this[a] = c } this.reverse(); this.length -= max; return this }; function addNumber() { var arr = Array(16).shuffle(1, 5000); var table = document.querySelector(".num"); table.innerHTML = ""; var length = 10, tr, thTitle = ["Заголовок 1", "Заголовок 2"]; arr.forEach(function (number, indx) { if (indx % length == 0) { tr = table.insertRow(-1); if(thTitle.length){ var th = document.createElement("th"); th.colSpan = length; th.innerHTML = thTitle.shift(); tr.appendChild(th); tr = table.insertRow(-1); } } var td = tr.insertCell(indx % length); td.innerHTML = number }); } </script> </body> </body> </html> |
Dark_Delphin,
не копируйте сообщение целиком, если в этом нет необходимости. |
оу... Рони, спасиб тебе большое. дай тебе здоровья за помощь)
|
Часовой пояс GMT +3, время: 09:51. |