PHP将数组插入对象

时间:2014-05-01 22:19:00

标签: php arrays object

我正在尝试将一个数组注入一个对象,但它只是不起作用。这就是我在做的事情:

1)从数据库中获取特定的Match记录

2)从数据库中获取与该匹配相关的所有Player条记录

3)将玩家添加到Match对象

代码:

$matchQuery = "SELECT * FROM matches where new = 1 order by date asc limit 1";
$matchResult = mysql_query($matchQuery,$link) or die('Errant query:  '.$matchQuery);

/* create one master array of the records */
$matches = array();
if(mysql_num_rows($matchResult)) {
    while($match = mysql_fetch_assoc($matchResult)) {

        $playersQuery = "SELECT p.* FROM match_players mp
                        LEFT JOIN players p on p.id = mp.player_id
                        WHERE mp.match_id = '$match->id'";

        $playerResult = mysql_query($playersQuery,$link) or die('Errant query:  '.$playersQuery);

        $players = array();
        if(mysql_num_rows($playerResult)) {
            while($player = mysql_fetch_assoc($playerResult)) {
                $match->players[] = $player; //<-- This doesn't seem to work
            }
        }
        $matches[] = $match;
    }
}

Match内的对象正在吐出,但是Players不是。

2 个答案:

答案 0 :(得分:1)

$match是一个数组,是已弃用的mysql_fetch_assoc()的结果。所以$match->players[] = $player;无效。

如果sql结果中没有players键,您可以将其添加到数组中:

$match['players'][] = $player;

否则你必须使用不同的密钥。

另一个问题是您在循环中的查询:您使用的是$match->id,而$match['id']应该是$match,因为{{1}}是一个数组。

顺便说一句,在循环中执行sql查询绝不是一个好主意,你应该尝试在一个查询中加入不同的表来获得结果。

答案 1 :(得分:1)

$match["players"] = array();

while($player = mysql_fetch_assoc($playerResult)) {
   $match["players"][] = $player;
}