我在使用sql / pdo时遇到问题,我需要一个带有这样的服务器的数组列表:
stdout
我需要从mysql获取所有信息,其中$ server [1]是'server 1''quake3''194.109.69.61',我这样使用:
$servers = array(
'server 1' => array('quake3', '194.109.69.61'),
'server 2' => array('cssource', '194.109.69.51', 27015),
'server 3' => array('bf2142', '194.109.69.21'),
'server 4' => array('ts3', 'voice.planetteamspeak.com')
);
但是在所有行上只显示相同的结果。
答案 0 :(得分:0)
在每次迭代中,您将相同的数组(覆盖数据)重新分配到$servers
中-最好将每一行附加到结果数组中。
请考虑以下内容:
foreach($result as $k => $row) {
$key = 'server ' . $k; // as "server 1", "server 2" etc...
$servers[$key] = array('cs', $row[9], $row[10]);
}
现在您可以在$servers
中看到结果了
已编辑
如果您希望每个玩家都换行,则将<td>
插入嵌套的for循环中,如下所示:
foreach($result as $row) {
foreach ($results as $r) {
echo "<tr><td align='center'>$row[17]</td><td align='left'>$row[1]</td><td align='center'>$row[9]:$row[10]</td>";
echo "<td align='center'>".$r['num_players']."/".$r['max_players']."</td>"; echo "<td align='center'>".$r['map']."</td></tr>";
}
}
答案 1 :(得分:0)
您不清楚“服务器名称”(例如“服务器1”)或“游戏类型”(例如“ cs”)的来源。
但是,有些事情很清楚。您正在用每个新行覆盖$servers
数组。
类似这样的结果会更好:
$servers = array(); // or []
foreach ($result as $n => $row) {
$servers['server ' . ($n+1)] = array('cs', $row[9], $row[10]);
}
那将为您提供一系列服务器。它们都是'cs'类型。我认为游戏类型是您专栏中的另一本...
返回关联数组可能更清晰,因此可以使用列名而不是索引号。例如
$servers = array(); // or []
foreach ($result as $n => $row) {
$servers['server ' . ($n+1)] = array($row['game'], $row['ip'], $row['port']);
}