0

ウェブサイトのゲームのトップ 10 リストを作成しようとしています。サイト上のゲームに関するすべての情報を含む連想配列があります。

$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」と呼ばれるキーがあり、ユーザーがそのゲームをプレイするたびに増加します。プレイ回数の多いゲームを上位から順に 10 ゲーム挙げてみたいと思います。私はこれを行う方法を知っています。for ループ、ネストされた for ループ、foreach ループを使用してみましたが、何が間違っているのかわかりません。誰でもこれで私を助けることができますか?

4

2 に答える 2

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は、「インデックス 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 に答える