Генерировать случайное число в массив
Получил foreach
, выборка данных из таблицы, и это делает insert
и в другой таблице. Мне нужно подсчитать количество записей foreach
), а затем генерировать случайную последовательность, и накормить поле insert
.
Посмотрите, код:
$dados2 = connection::select('SELECT * FROM tab1');
foreach ($dados2 as $reg) {
$campo1 = $reg['campo1'];
$campo2 = $reg['campo2'];
$sequencia_aleatoria = '';
}
connection::exec("insert into tab2(campo1,campo2,sequencia_aleatoria) values('$campo1','$campo2','$sequencia_aleatoria')");
я Надеюсь, что они поняли мой вопрос.
2 answers
Другой вариант заключается в использовании функции mt_rand
чтобы генерировать случайное значение, и count
для возврата сложности элементов array
:
$dados2 = connection::select('SELECT * FROM tab1');
foreach ($dados2 as $reg) {
$campo1 = $reg['campo1'];
$campo2 = $reg['campo2'];
$sequencia_aleatoria = mt_rand(0, count($dados2);
// Para inserir os dados de acordo com a linha atual
connection::exec("insert into tab2(campo1,campo2,sequencia_aleatoria) values('$campo1','$campo2','$sequencia_aleatoria')");
}
Примечание: второй вариант, возможно, функция mysqli_num_rows
, чтобы получить количество строк в результате select
, таким образом, не было бы необходимости count($dados2)
.
, все же, есть возможность создания повторяющихся цифр.
Другой способ будет генерировать array
с диапазон номеров range
и использовать функцию shuffle
смешать элементы.
Выглядеть так:
$dados2 = connection::select('SELECT * FROM tab1');
$linhas = $dados2->fetchAll();
$numeros = range(1, count($linhas));
shuffle($numeros); // Mistura os elementos
foreach ($linhas as $i => $linha) {
$campo1 = $linha['campo1'];
$campo2 = $linha['campo2'];
$sequencia_aleatoria = $numeros[$i];
// Para inserir os dados de acordo com a linha atual
connection::exec("insert into tab2(campo1,campo2,sequencia_aleatoria) values('$campo1','$campo2','$sequencia_aleatoria')");
}
Использует функцию uniqueid
PHP, последовательный что-то вроде:
$dados2 = connection::select('SELECT * FROM tab1');
$contagem=0;
foreach ($dados2 as $reg) {
$campo1 = $reg['campo1'];
$campo2 = $reg['campo2'];
$contagem++;
}
$sequencia_aleatoria=rand(0,$contagem);
connection::exec("insert into tab2(campo1,campo2,sequencia_aleatoria) values('$campo1','$campo2','$sequencia_aleatoria')");
Функции uniqid()
генерирует хеш-код на основе миллисекунд, то есть возможность повторения.
Я Думаю, что ваш код будет так:
$dados2 = connection::select('SELECT * FROM tab1');
$numero=count(dados2);
foreach ($dados2 as $reg) {
$campo1 = $reg['campo1'];
$campo2 = $reg['campo2'];
$sequencia_aleatoria=rand(0,$numero);
connection::exec("insert into tab2(campo1,campo2,sequencia_aleatoria) values('$campo1','$campo2','$sequencia_aleatoria')");
unset($sequencia_aleatoria);
}
Колесо это q работает
<?php
$contagem=420; // aqui iioria o count($resultado);
for($i=0;$i<=$contagem;$i++){
echo rand(0,$contagem)."<br>";
}
?>
Логике он же и та прокатки.
Проверяет онлайн здесь http://phptester.net/
Вместо d vc сделать foreach делает являетесь
$dados2 = connection::select('SELECT * FROM tab1');
$numero=count(dados2);
for($i=0;$i<$numero;i++) {
$reg=$dados2[$i];
$campo1 = $reg['campo1'];
$campo2 = $reg['campo2'];
$sequencia_aleatoria=rand(0,$numero);
connection::exec("insert into tab2(campo1,campo2,sequencia_aleatoria) values('$campo1','$campo2','$sequencia_aleatoria')");
unset($sequencia_aleatoria);
}