(тип оптимизатора веб-сайта Google) рандомизация в PHP (но умная, быстрая и тонкая)

Каждый раз, когда кто-то посещает мой сайт, я показываю один из трех вариантов (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
)

person Roger    schedule 17.01.2011    source источник
comment
Как вы храните данные о кликах? Можем ли мы получить пример кода того, как вы формулируете текущие параметры отображения? Похоже, ответ должен быть простым массивом с прикрепленным к нему usort(), но я могу ошибаться, если у нас нет примеров.   -  person Geoffrey Wagner    schedule 18.01.2011


Ответы (2)


Не уверен, что правильно понял ваш вопрос. Но если бы я это сделал, то следующий, возможно, довольно наивный и, возможно, даже многословный способ сделать то, что, как я думаю, вы хотите сделать:

// 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 );
person Decent Dabbler    schedule 17.01.2011
comment
просто любопытно, а не будет ли 'A' => 0 возиться с выбором? - person Toby; 23.10.2012
comment
@ Тобиас, я не знаю, как. Можете ли вы уточнить? - person Decent Dabbler; 24.10.2012

Вы МОЖЕТЕ сделать это с помощью PHP и БД, но вы можете предпочесть использовать Google Website Optimizer, я думаю, что он предлагает этот вариант и работает довольно хорошо.

person Or Weinberger    schedule 17.01.2011
comment
Я думаю, у меня есть что-то слишком простое, чтобы использовать что-то оооочень сложное :-) - person Roger; 18.01.2011
comment
Оптимизатор веб-сайтов Google не очень сложен. На самом деле он был создан для той же цели, которую вы пытаетесь получить. Вам нужно протестировать различные макеты/кнопки/целевые страницы, чтобы увидеть, что работает и что заставляет посетителей кликать. - person Or Weinberger; 18.01.2011
comment
Я не имею в виду сложный для обычного пользователя. Я имею в виду сложный для моего обычного случая. - person Roger; 18.01.2011
comment
Я имел в виду то же самое, это не слишком много для ваших нужд. Он был построен ИМЕННО для ваших нужд. - person Or Weinberger; 18.01.2011
comment
Спасибо за постоянную поддержку продукта Google, но это не то, чего я хочу. - person Roger; 18.01.2011