2016-10-19 18 views
0

テーブルに対してクエリを実行し、別のインサートにランダムな整数値のフィールドを挿入するコードがありますが、多くのレコードがあるときに繰り返しています。配列シャッフルの繰り返し値

コード:

$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

合計する配列... –

+0

。実際にあなたがしようとしているものを得るためには、やり直す必要があります。そして、ループ内に空を使用しないでください –

+0

ループのたびに 'srand()'を呼び出さないでください。スクリプトの冒頭で一度呼びます。 – Barmar

答えて

0

あなたがメインforeachループの外で乱数の配列を作成する必要があります。次に、各インサートに配列の要素を1つだけ使用します。この方法では、重複はありません。あなたのコードは、それが繰り返される非常に論理的だ何をするかを考える場合

$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なしでカウントするには、このエラーが発生しました。 'Notice:Undefined offset ' –

+0

' $ d'とは何ですか?あなたが 'foreach($ d)'を使うので、配列であると仮定しました。 – Barmar

+0

独自のデータベース接続クラスを使用していますが、必要な情報(行数など)の取得方法を知っていませんか? PDOでは '$ stmt-> rowCount()'ですが、mysqliでは 'mysqli_num_rows()'です。 – Barmar