我正在用PHP編寫一個腳本,根據調查中相同答案的數量將人員進行比較。我使用這樣的陣列:PHP數組問題
[人物ID] =>數答案相同
存儲最接近於所述一個我正在與比較10人。
我需要弄清楚如何找到最低的10 數量的答案相同的覆蓋和更高的號答案相同,並用它修改人ID關鍵。
任何幫助?
我正在用PHP編寫一個腳本,根據調查中相同答案的數量將人員進行比較。我使用這樣的陣列:PHP數組問題
[人物ID] =>數答案相同
存儲最接近於所述一個我正在與比較10人。
我需要弄清楚如何找到最低的10 數量的答案相同的覆蓋和更高的號答案相同,並用它修改人ID關鍵。
任何幫助?
難道保持你的數組按相同的答案數排序更容易嗎?也許即使只是添加新的人,度假陣列並刪除第一個/最後一個..
聽起來像你可以很容易地解決這個問題,但需要在PHP中做很多工作。
您需要根據delta到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;
你能改寫「最低的10號答案相同的覆蓋和更高答案數量相同,並修改人員ID密鑰。「?我不明白你在問什麼。你應該已經注意到了:英語不是我的選擇成語。 – Eineki 2009-01-27 16:45:03
嗯。 我需要保持陣列充滿了10個最高匹配。 根據Tim的建議解決了這個問題 – user29772 2009-01-28 23:33:30