Вот моя первая попытка решить эту проблему. Я прошу всех новых пользователей оценить ряд разнообразных продуктов. Затем я идентифицирую 3 существующих пользователей, с которыми они наиболее похожи, основываясь на этих рейтингах. Затем я могу использовать информацию, имеющуюся у этих трех пользователей, чтобы рекомендовать элементы при первом посещении сайта.
Спасибо всем, кто дал мне совет :)
/**
* Select all of the customer ratings
*/
$rows = getRows("SELECT * FROM customer_ratings;", 'NUM');
if(isset($_POST['submit'])){
//Fill distanse array to zero for all items
$distance = array_fill(0, count($rows), 0);
$instance = $_POST['instance'];
//Loop over each of the exisiting ratings rows
for($i = 0; $i < count($rows); $i++) {
//Loop over the 5 items (The first two are id and name we only need 2-6)
for($j = 2; $j < 7; $j++) {
$distance[$i] += abs(($rows[$i][$j] - $instance[$j]));
}
}
//Sort distances by ascending order
asort($distance);
$distanceCopy = $distance;
$stringBuff = "";
//Select the three most similar
for($i = 0; $i < 3; $i++){
$maxs = array_keys($distanceCopy, min($distanceCopy));
$stringBuff = $stringBuff . " ". ($maxs[0]+1) .",";
unset($distanceCopy[$maxs[0]]);
}
$stringBuff = substr_replace($stringBuff,"", -1);
echo "String buff: ".$stringBuff;
$mostSimilar = getRows("SELECT name FROM customer_ratings WHERE id IN ($stringBuff);", 'NUM');
}