我正在用PHP编写一个脚本,根据调查中相同答案的数量将人们进行比较。我使用这样的数组:
[人ID ] => 答案数相同
存储最接近我所比较的10个人。
我需要弄清楚如何找到相同的10个答案数中最低的并覆盖更高的答案数并修改人ID 键。
任何帮助?
答案 0 :(得分:2)
听起来你可以很容易地在SQL中解决这个问题,但需要在PHP中做大量的工作。
答案 1 :(得分:1)
根据相同答案的数量排列数组会不会更容易?也许只是添加新人,使用数组并删除第一个/最后一个..
答案 2 :(得分:1)
您需要根据到person.number_of_answers
的增量对条目进行排序。例如:
function cmp_by_delta($a, $b) {
if ($a->delta == $b->delta) {
return 0;
}
return ($a->delta < $b->delta) ? -1 : 1;
}
// calculate delta for each entry
foreach ($entries as $person) {
$person->delta = abs($target_person->number_of_answers - $person->number_of_answers);
}
// sort entries by delta
usort($entries, 'cmp_by_delta');
// take 10 first matches from sorted array
$10_best_matches = array_slice($entries, 0, 10);
当然,这可以在数据库中更漂亮,更有效率地完成:
select * from people
order by abs(number_of_answers - :target_number_of_answers)
limit 10;