数组在所有行上仅侦听一次

时间:2019-03-20 09:06:00

标签: php mysql sql arrays pdo

我在使用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')
);

但是在所有行上只显示相同的结果。

2 个答案:

答案 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']);
}