0

こんにちは、特定の SQL クエリの結果を JSON に出力したい単純なスクリプトに取り組んでいます。

これは私がこれまでに持っているものです:

$player = $this->game->getPlayer(5);
$leaderboard= $this->game->getLeaderboard(5);

$data = array(
            'player' => array(
                $player[0]->member_userunique, // USERNAME
                $player[0]->score, // HIGHSCORE
                $player[0]->memberid
            ),
            'leaderboard' => array(
                'score #1',
                'score #2',
                'score #3',
                'score #4',
                'score #5'
            )
        );
echo json_encode($data);

getPlayer(x) は、プレイヤーに関する情報を返します。getLeaderboard はデータベースから上位 5 つのレコードを取得します。ただし、返された SQL 結果から各行を「リーダーボード」配列に反復処理したいと思います。

$leaderboard[0]->.... などと入力してブルートフォースを使用できると思いますが、これを行うよりスマートな方法を知りたいです。

助けてくれてありがとう。

4

3 に答える 3

2

以下のようなものを使用して、配列を構築できます。

$leaderboardArray = array();
foreach($leaderboard as $num => $score){
    $leaderboardArray['score #'.$num] = $score; 
}
$data['leaderboard'] = $leaderboardArray;
于 2013-05-31T09:05:39.950 に答える
0

配列をループして$leaderboard、後で含めるために配列を構築するだけです

$player = $this->game->getPlayer(5);
$leaderboard= $this->game->getLeaderboard(5);

$leaderboard_array = array('leaderboard'=>array());
foreach($leaderboard as $val)
{
    $leaderboard_array[] = 'score #' . $val;
}

$data = array(
        'player' => array(
            $player[0]->member_userunique, // USERNAME
            $player[0]->score, // HIGHSCORE
            $player[0]->memberid
        ),
        $leaderboard_array,
    );
于 2013-05-31T09:09:19.957 に答える
0

まあ、getLeaderboard に必要なスコアを含む配列を返させてから、次のように $data に挿入することができます

$data['leaderboard'] = $leaderboard;

2 番目の解決策は、リーダーボード配列をループして各要素を追加することです (getLeaderboard から返されたときに、リーダーボードが希望する順序でソートされていると仮定します)。

foreach($leaderboard as $entry) {
    $data['leaderboard'][] = "Score #" . $entry;
}

これは、リーダーボードが文字列または数値の配列を返し、$data['leaderboard'] が空であることを前提としています。空でない場合は、設定を解除するか、キーを使用して更新中の位置を参照します

于 2013-05-31T09:10:08.933 に答える