2009-01-27 79 views
0

我正在用PHP編寫一個腳本,根據調查中相同答案的數量將人員進行比較。我使用這樣的陣列:PHP數組問題

[人物ID] =>數答案相同

存儲最接近於所述一個我正在與比較10人。

我需要弄清楚如何找到最低的10 數量的答案相同的覆蓋和更高的號答案相同,並用它修改人ID關鍵。

任何幫助?

+0

你能改寫「最低的10號答案相同的覆蓋和更高答案數量相同,並修改人員ID密鑰。「?我不明白你在問什麼。你應該已經注意到了:英語不是我的選擇成語。 – Eineki 2009-01-27 16:45:03

+0

嗯。 我需要保持陣列充滿了10個最高匹配。 根據Tim的建議解決了這個問題 – user29772 2009-01-28 23:33:30

回答

1

難道保持你的數組按相同的答案數排序更容易嗎?也許即使只是添加新的人,度假陣列並刪除第一個/最後一個..

2

聽起來像你可以很容易地解決這個問題,但需要在PHP中做很多工作。

1

您需要根據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;