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;

第二种解决方案是循环添加每个元素的排行榜数组(假设从 getLeaderboard 返回时排行榜按您想要的顺序排序)

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

这假设排行榜返回一个字符串或数字数组,并且在您执行此操作时 $data['leaderboard'] 为空。如果它不为空,请取消设置或使用键来引用您正在更新的位置

于 2013-05-31T09:10:08.933 回答