我正在尝试将一个数组注入一个对象,但它只是不起作用。这就是我在做的事情:
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
不是。
答案 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;
}