-1

我的 sql/pdo 有问题,我需要一个包含这样的服务器的数组列表:

$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')
);

我需要从 mysql 获取所有信息,'server 1' 'quake3' '194.109.69.61' 和 $row[1] 在哪里,我是这样使用的:

foreach($result as $row) {
    $servers = array(
        'server 1' => array('cs', $row[9], $row[10])
    );
}

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

4

2 回答 2

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>"; 
    } 
}
于 2019-03-20T09:35:19.063 回答
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']);
}
于 2019-03-20T09:38:50.840 回答