0

我正在尝试为我的网站制作前十名游戏列表。我有一个关联数组,其中包含有关我网站上游戏的所有信息。

$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 循环,但我不知道自己做错了什么。有人可以帮我吗?

4

2 回答 2

2

您可以使用按键usort()对每个条目进行排序play_countusort表示“用户定义的排序”;它允许您指定自定义比较函数。

然后使用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是说:“我想要从索引 0 开始的数组中的 10 个元素。” 如果存在的元素少于 10 个,则该函数足够智能,仅返回这些元素而不会引发错误。

于 2013-08-30T23:49:35.020 回答
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);
于 2013-08-30T23:54:45.830 回答