如何在php中使用数组创建前十个列表

时间:2013-08-30 23:45:04

标签: php arrays associative-array

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

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

2 个答案:

答案 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);