2014-05-01 109 views
-1

我想向对象中注入数组,但它只是不工作。这是我在做什么:PHP将数组插入对象

1)从数据库中

2)获取所有这一切都是与比赛相关的数据库中的Player记录

3)添加他们获取特定Match记录玩家在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

是否有更多的代码?你是否实例化了你的对象? – Scopey

+0

'$ players = array();'似乎没有被使用。 –

+0

你为什么要做'$ players = array();'它没有用处? – Rooster

回答

1

$match是一个数组,其结果是弃用mysql_fetch_assoc()。所以$match->players[] = $player;是不会工作的。

如果在SQL结果没有players键,您可以将其添加到阵列中:

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

否则,你将不得不使用不同的密钥。

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

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

+0

由于某些原因,上面定义的玩家数组为空。它没有得到球员。如果我在数据库中正确运行查询,它将起作用。 – Subby

+0

@Subby你假设'$ match'是一个对象,但它不是。在你的查询中(循环中的那个)你使用'$ match-> id',那应该是'$ match ['id']'。 – jeroen

+0

完美! @ jeroen对于总统! – Subby

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

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

谢谢你的Jirka! – Subby