使用foreach插入数组元素

时间:2013-05-31 09:01:48

标签: php sql arrays json codeigniter

您好我正在编写一个简单的脚本,我希望将给定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] - > ....等我可以使用一些蛮力,但我想知道更聪明的方法来做到这一点。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

以下内容可用于构建阵列:

$leaderboardArray = array();
foreach($leaderboard as $num => $score){
    $leaderboardArray['score #'.$num] = $score; 
}
$data['leaderboard'] = $leaderboardArray;

答案 1 :(得分: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,
    );

答案 2 :(得分:0)

好吧,你可以让getLeaderboard以你想要的分数返回数组,然后将它插入到这样的$ data中

$data['leaderboard'] = $leaderboard;

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

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

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