Генерировать случайное число в массив


Получил 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')");

я Надеюсь, что они поняли мой вопрос.

 4
Author: stderr, 2016-10-18

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')");                    
}
 2
Author: stderr, 2016-10-20 19:30:10

Использует функцию 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);    
}
 3
Author: Jasar Orion, 2016-10-18 15:53:51