html — простая логика сопоставления пользователей в переполнении стека

У меня есть HTML-страница, которая имеет 1 поле для ввода имени пользователя и 5 флажков для этого пользователя, чтобы указать, какие жанры музыки ему нравятся (эмбиент, рок, рэп, джаз, поп). Я дважды продублировал поля формы, чтобы получить следующие значения данных:

Том
окружающий
рок
Рэп

Сью
рок
Рэп
Джаз

Бетти
рок
Рэп
Джаз

Каков наилучший способ сделать алгоритм сопоставления пользователей в PHP? Из значений Сью и Бетти будет совпадать 100%, а Том будет совпадать менее чем на 100% с двумя другими.

Какие-либо предложения?

ниже код

<p>Put in your name and pick the music genres you like:</p>
<form id="form1" name="form1" method="post" action="">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="12%"><label for="name"></label>
<input type="text" name="name1" id="name1" vale="name1" placeholder="name 1"/></td>
<td width="12%"><label for="name"></label>
<input type="text" name="name2" id="name2" value="name2" placeholder="name 2"/></td>
<td width="13%"><label for="name3"></label>
<input type="text" name="name3" id="name3" value="name3" placeholder="name 3"/></td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox" id="checkbox" />
<label for="checkbox">Ambient</label></td>
<td><input type="checkbox" name="checkbox" id="checkbox" />
<label for="checkbox">Ambient</label></td>
<td><input type="checkbox" name="checkbox" id="checkbox" />
<label for="checkbox">Ambient</label></td>
</tr>
<tr>
<td><input type="checkbox" name="Rock" id="Rock" value="Rock"/>Rock</td>
<td><input type="checkbox" name="Rock" id="Rock" value="Rock"/>
Rock</td>
<td><input type="checkbox" name="Rock" id="Rock" value="Rock"/>
Rock</td>
</tr>
<tr>
<td><input type="checkbox" name="Rap" id="Rap" value="Rap"/>Rap</td>
<td><input type="checkbox" name="Rap" id="Rap" value="Rap"/>
Rap</td>
<td><input type="checkbox" name="Rap" id="Rap" value="Rap"/>
Rap</td>
</tr>
<tr>
<td><input type="checkbox" name="Jazz" id="JAzz" value="Jazz" />Jazz</td>
<td><input type="checkbox" name="Jazz" id="JAzz" value="Jazz" />
Jazz</td>
<td><input type="checkbox" name="Jazz" id="JAzz" value="Jazz" />
Jazz</td>
</tr>
<tr>
<td><input type="checkbox" name="Pop" id="Pop" value="Pop" />Pop</td>
<td><input type="checkbox" name="Pop" id="Pop" value="Pop" />
Pop</td>
<td><input type="checkbox" name="Pop" id="Pop" value="Pop" />
Pop</td>
</tr>
</table>

<br />
<input type="submit" name="button" id="button" value="Submit" />
</form>

-2

Решение

Если у вас есть опции в качестве массивов, вы можете сделать что-то с функцией array_diff. то есть

<?php
$tom = array("Ambient", "Rock", "Rap");
$sue = array("Rock", "Rap", "Jazz");
$betty = array("Rock", "Rap", "Jazz");

//compare tom to sue
$total = count($tom);
$diff = count(array_diff($tom, $betty));
$percent = 100 - ($diff / $total * 100);

echo round($percent, 2)."% match between Tom and Sue";
2

Другие решения

Используйте ассоциативный массив для добавления списка жанров каждому из пользователей. Затем сравните жанры в цикле:

$user_genre['Tom']=array('Ambient', 'Rock', 'Rap');
$user_genre['Sue']=array('Rock', 'Rap', 'Jazz');
$user_genre['Betty'] =array('Rap', 'Rock', 'Jazz');
$match=0;
foreach ($user_genre['Tom'] as $tom_genre){
foreach ($user_genre['Sue'] as $sue_genre){
if ($tom_genre == $sue_genre){
$match++;
}
}
}

Не очень хороший код, просто то, как вы должны думать.

2

Предполагая, что вы сохраняете выбор пользователя в массивах, которые вы можете использовать array_intersect

вот пример:

<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?>

Выход:#

Array
(
[a] => green
[0] => red
)

А вот и Руководство по PHP со всеми функциями массива.

0
По вопросам рекламы [email protected]