1

誰かが私のサイトにアクセスするたびに、3 つのオプション (A、B、C) のいずれかを表示します。ユーザーがそのオプションを気に入った場合、ユーザーはそれをクリックします。クリック数が少ないオプションを表示する方法を見つけたいと考えています。PHPでこれを行う最良の方法は何ですか?

配列に「投票」を追加するだけで、MongoDB にクリックを保存しています。

$option[]='a';//one click on option A
$option[]='b';//one click on option B
$option[]='b';//another click on option B

try{
 $m=new Mongo();
 $c=$m->db->clicks;
 $c->save($option);
 $m->close();
}
catch(MongoConnectionException $e){ die('Error connecting to MongoDB server. ');}
catch(MongoException $e){ die('Error: '.$e->getMessage());} 

これは以下を出力します:

Array
(
    [0] => a
    [1] => b
    [2] => b
)
4

2 に答える 2

1

あなたの質問を正しく理解しているかどうかわかりません。しかし、もしそうなら、以下はおそらくあなたがやりたいと思うことを行うためのかなり素朴で、おそらく冗長な方法です。

// assume the following fictional values,
// that is, the amount of clicks each option has received thusfar
$clicks = array(
  'A' => 10,
  'B' => 40,
  'C' => 50
);

// what is the total amount of clicks?
$totalClicks = array_sum( $clicks );

// determine the lower bound percentages of the option clicks
$clickPercentageBounds = array(
  'A' => 0,
  'B' => ( ( $clicks[ 'A' ] + 1 ) / $totalClicks ) * 100,
  'C' => ( ( $clicks[ 'A' ] + $clicks[ 'B' ] + 1 ) / $totalClicks ) * 100
);

// get random percentage
$rand = mt_rand( 0, 100 );

// determine what option to show, based on the percentage
$option = '';
switch( true )
{
    case $rand < $clickPercentageBounds[ 'B' ]:
        $option = 'A';
        break;
    case $rand < $clickPercentageBounds[ 'C' ]:
        $option = 'B';
        break;
    default:
        $option = 'C';
        break;
}

var_dump( $option );
于 2011-01-17T22:53:26.273 に答える
1

PHP とデータベースでそれを行うことができますが、Google ウェブサイト オプティマイザーを使用することを好むかもしれません。それはそのオプションを提供し、非常にうまく機能すると思います。

于 2011-01-17T22:30:48.410 に答える