如果我首先解释一下它会有所帮助......我参加的比赛中每个县有3名获胜者(投票率最高的人)。
我当前的数组如下所示:
Array
(
[0] => Array
(
[entryID] => 1
[votes] => 3
[countyID] => 46
)
[1] => Array
(
[entryID] => 4
[votes] => 1
[countyID] => 2
)
[2] => Array
(
[entryID] => 2
[votes] => 0
[countyID] => 46
)
[3] => Array
(
[entryID] => 5
[votes] => 0
[countyID] => 46
)
)
我需要做的是找出在每个CountyID中找到前3名最高票数的方法。
我是如何实现这一目标的? 谢谢, 斯科特。
答案 0 :(得分:1)
最简单的方法是重新组织你的数组,以便国家ID是顶级索引,然后只需编写一个简单的自定义函数来按降序对投票计数进行排序......这样最高投票条目在最前面。
$entries = array(
array('entryId' => 1, 'votes' => 3, 'countryId' => 46),
array('entryId' => 4, 'votes' => 1, 'countryId' => 2),
array('entryId' => 2, 'votes' => 0, 'countryId' => 46),
array('entryId' => 5, 'votes' => 0, 'countryId' => 46),
);
// Sort votes in descending order (most on top)
function voteSort($a, $b) {
if ($a['votes'] == $b['votes']) {
return 0;
}
return ($a['votes'] < $b['votes']) ? 1 : -1;
}
// Re-organize the array with country as top level
$byCountry = array();
foreach ($entries as $entry) {
$byCountry[$entry['countryId']][] = array(
'entryId' => $entry['entryId'],
'votes' => $entry['votes']
);
}
// For each country, sort by votes
foreach ($byCountry as $index => $country) {
usort($byCountry[$index], 'voteSort');
}
这应该有效。
答案 1 :(得分:0)
函数ksort()
会有所帮助。
您可以先使用排名对数组进行排序,然后对国家/地区进行排序。因此,你将在阵列开始时的每个国家拥有所有的第一,然后是秒,等等
您将传递给ksort的函数将是
function compareVote($a,$b){
if($a['votes'] > $b['votes'])
return 1;
if($a['votes'] == $b['votes']){
if($a['countyID'] > $b['countyID'])
return 1;
if($a['countyID'] == $b['countyID'])
return 0;
return -1;
}
return -1;
}
答案 2 :(得分:0)
您可以通过以下方式按唯一的国家/地区ID拆分数组:
$entries = array(
array('entryID' => 1, 'votes' => 3, 'countryID' => 46),
array('entryID' => 4, 'votes' => 1, 'countryID' => 2),
array('entryID' => 2, 'votes' => 0, 'countryID' => 46),
array('entryID' => 5, 'votes' => 0, 'countryID' => 46),
);
$entriesByCountry = array();
foreach($entries as $entry) {
if(!array_key_exists($entry->countyID, $entriesByCountry)
$entriesByCountry[$entry->countyID] = array();
$entriesByCountry[$entry->countyID][] = $entry;
}
然后按投票排序每个国家/地区阵列并取第3个。