Сейчас я создаю такую систему, как социальные сети. И он имеет функцию давать рекомендации пользователю на основе результата вычисления сходства между пользователем, который вошел в систему со всеми существующими пользователями в системе базы данных. И самое высокое сходство будет показано и будет рекомендацией для пользователя, который вошел в систему, чтобы стать другом в системе. Нет, теперь я использую 3 пользователя для тестирования моей программы и формулы корреляции моего Пирсона. Все идет хорошо. Но если в системе всего 3 пользователя, я могу использовать этот код для отображения результата расчета:
$u2=$u[1];
$u3=$u[2];
$sim1_2=similarity($u1,$u2);
$sim1_3=similarity($u1,$u3);
echo "<br>sim 1-2 ".$sim1_2;
echo "<br>sim 1-3 ".$sim1_3;
?>
где $u1
относится к пользователю, который вошел в систему. Но если я хочу показать все результаты сравнения пользователя, который вошел в систему со всеми существующими пользователями в базе данных, как? Потому что мы не можем предсказать, сколько пользователей будет зарегистрировано в моей системе позже. Итак, как лучше всего сравнить пользователя, вошедшего в систему, со всеми существующими пользователями в базе данных? Спасибо заранее за вашу помощь.
Вы можете просто получить массив или коллекцию всех ваших пользователей (или группу пользователей) и просто перебрать его, используя за или же для каждого цикл, выполняя функциюхожие (), которую вы написали. И если функция подобия возвращает положительный результат корреляции, добавьте его в другой массив сходств этого пользователя.
Вот пример:
// Get users in any way you want. Let's assume that $users is an array
$users = getUsers();
//iterate over all users
foreach ($users as $user)
{
// Check if current user is similar to a user
if (similarity($yourUser, $user))
{
// If the similarity function does not return false
// then add that similarity result to an array.
// We will assume that the similarity function returns
// an associative array with keys such as 'username', 'id' etc
$similarities[] = similarity($yourUser, $user);
}
}
// Now we have a multi-dimensional array of similarity data that you can use in any way you want
// For example, lets display all usernames of the similar users
foreach ($similarities as $similarity)
{
echo $similarity['username'];
}
Это всего лишь пример того, как вы могли бы сделать это. Конечно, вы можете заключить этот код в функцию или метод пользовательского класса в зависимости от того, как вы пишете и структурируете свой код.
Очевидно, что эта операция может занять много времени, если в вашей системе много пользователей, так что имейте это в виду и будьте осторожны, когда и как вы запустите этот код.
Других решений пока нет …