2016-10-19 4 views
0

У меня есть этот код, который делает запрос в таблице, а затем выполняет вставку в другую вставку поля со случайным целочисленным значением, но он повторяется, когда у меня много записей.Повторяющиеся значения Array shuffle

Код:

$d = connection::select(select * from tabela1); 

    foreach ($d as $reg) { 

     $c1 = $reg['c1']; 
     $c2 = $reg['c2']; 
     $c3 = $reg['c3']; 

     $count = count($reg); 

     $numbers = range(1, $count- 1); 
     srand((float) microtime() * 10000000); 
     shuffle($numbers); 
     foreach ($numbers as $number) { 

     } 

     connection::exec("insert into table2 (c1,c2,c3,seq)values('$c1','$c2','$c3',$number)"); 
} 
+0

summing array .. –

+0

Если вы думаете о том, что делает ваш код, это вполне логично, он повторяется. Вы должны переделать его, чтобы получить то, что вы пытаетесь сделать. И не использовать пустые для петель в нем –

+0

Не вызывайте 'srand()' каждый раз через цикл. Вызовите его один раз в начале скрипта. – Barmar

ответ

0

Вы должны создать массив случайных чисел за пределами основного foreach цикла. Затем просто используйте один элемент массива для каждой вставки. Таким образом, вы никогда не получите дубликатов.

$d = connection::select("select * from tabela1"); 
$rows = $d->fetchAll(); 
$count = count($rows); 
$numbers = range(1, $count); 
srand((float) microtime() * 10000000); 
shuffle($numbers); 
foreach ($rows as $i => $reg) { 
    $number = $numbers[$i]; 
    $c1 = $reg['c1']; 
    $c2 = $reg['c2']; 
    $c3 = $reg['c3']; 
    connection::exec("insert into table2 (c1,c2,c3,seq)values('$c1','$c2','$c3',$number)"); 
} 
+0

Спасибо @Barmar. Как я могу считать без PDO, эта ошибка возникла? Примечание: неопределенное смещение –

+0

Что такое '$ d'? Я предположил, что это массив, поскольку вы используете 'foreach ($ d)'. – Barmar

+0

Вы используете свой собственный класс подключения к базе данных, разве вы не знаете, как использовать его для получения необходимой вам информации, например, количества строк? В PDO это '$ stmt-> rowCount()', в mysqli это 'mysqli_num_rows()'. – Barmar