2011-12-13 16 views
0

フィールドのランダム行を選択する関数を作成する必要があります。 one, two, three, four,five,six「0」の値を持っており、「1」に設定します。行のランダムなFIELDを選択し、それに応じて更新する

は、関数が、私は、次のいずれかのフィールドを更新する必要が呼び出されたときのフィールドは

id, user, one, two, three, four,five,six 
1,'jack',0,0,0,1,0,0 

と呼ばれているとしましょう。したがって、1つのフィールドを複数回選択することはできません。実際には、この種の処理を必要とする10以上のフィールドがあります。順序はランダムでなければなりません。

私はまだ余りにも多くの行を書くことなく論理を理解しようとしています。助言がありますか?

+1

実際のコード本当の構造がより親切 –

+0

「ランダム」は、1つの列*を意味し、擬似より*選択することができている3〜4回一列に(理由を見るためにサイコロを巻く)おそらくあなたは[列をシャッフルしたい](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)? –

+0

@Catcallフィールドが選択されると、それは1に設定されるので、2回選択することはできません。しかし、私はシャッフル()のavareもなかった... – domino

答えて

1

方法について:

function Z($id){ 
    $array =array('one','two','three'); //field names 
    shuffle($array);//radnoise the array 

    $update=''; 
    foreach($array as $k => $a){ 
     if($k==0){ 
      $update .="'$a'=1,";//first random field is 1 

     }else{ 
      $update .="'$a'=0,";//all other fields are 0 
     } 
    } 

    $update=rtrim($update,",");//remove last comma 

    $q="update table set $update where id=$id"; 
return $q; //for testing, otherwise run query 
} 

echo Z('4'); //test it 

//バージョン2

function ZZ($id){ 
    $array =array('one','two','three'); //field names 
    $value=$array[array_rand($array)]; 
    $q="update table set '$value'=1 where id=$id"; 
return $q; //for testing, otherwise run query 
} 

echo ZZ('4'); //test it 
+0

興味深い。私はそれが好きですが、他のすべてのフィールドが0でないか0に設定されています。最終的に行はすべてのフィールドを1にします。 – domino

+0

OK、1つのランダムに選択されたフィールド名を更新します。その場合はarray_rand()を使用する必要があります。 –

+0

返されたフィールドが既に1の場合はどうなりますか? array_randをもう一度やってみることもできますが、もしそれも1であればどうなりますか?彼らはすべて1の場合はどうなりますか? – domino

0

どのデータベースでもランダムな列を選択する方法は聞いたことがありませんが、値がすべて1または0の場合、すべてを1つにまとめるだけではどうですか?そうすれば、101000100001001のような文字列を持つことになります。ここで、各桁は異なる「列」を表します。あなたはそれを操作してデータベースを更新するためにPHPを使うことができます。

+0

私はそれを考えたことはありません。私はそれがそれぞれのために別々のフィールドを持つ方が便利だと思います。 – domino