我正试图为我的网站制作十大游戏列表。我有一个关联数组,其中包含有关我网站上游戏的所有信息。
$games = array();
$games[] = array(
"title" => 'Disaster will strike 2',
"link_name" => 'disaster-will-strike-2',
"id" => 1,
"desc" => 'Create earthquakes, launch fireballs and cause other crazy disasters to destroy all the eggs in each level.',
"cat" => 'Puzzle',
"img_src" => 'img/disaster_will_strike_2.png',
"play_count" => 0
);
每个游戏都有一个名为“play_count”的键,每当用户继续玩该游戏时,该键就会上升。我想列出从最高到最低的最高比赛次数的十场比赛。我知道如何做到这一点。我试过使用for循环,嵌套for循环,foreach循环,我不知道我做错了什么。有人可以帮我吗?
答案 0 :(得分:2)
您可以使用usort()
按play_count
键对每个条目进行排序。 usort
表示“用户定义的排序”;它允许您指定自定义比较函数。
然后使用array_slice()
从排序数组中取最多10个元素。
示例:
function sorter($a, $b){
if ($a->play_count == $b->play_count) {
return 0;
}
return $a->play_count < $b->play_count ? -1 : 1;
}
// Sort in place
usort($games, "sorter");
$top_ten = array_slice($games, 0, 10);
对array_slice
的调用是这样说:“我希望数组中的10个元素从索引0开始。”如果存在少于10个元素,则该函数足够智能,只返回那些元素而不会抛出错误。
答案 1 :(得分:0)
将采用一种方法
$games = array(
array('title' => 'game_1', 'play_count' => 5),
array('title' => 'game_2', 'play_count' => 4),
array('title' => 'game_3', 'play_count' => 1),
array('title' => 'game_4', 'play_count' => 4),
array('title' => 'game_5', 'play_count' => 3),
array('title' => 'game_6', 'play_count' => 9),
array('title' => 'game_7', 'play_count' => 9),
array('title' => 'game_8', 'play_count' => 11),
array('title' => 'game_9', 'play_count' => 14),
array('title' => 'game_10', 'play_count' => 12),
array('title' => 'game_11', 'play_count' => 5),
array('title' => 'game_12', 'play_count' => 7),
);
function custom_sort($a, $b) {
return $a['play_count'] < $b['play_count'];
}
usort($games, 'custom_sort');
$top = array_slice($games, 0, 10);