【问题标题】:Array is listen only once on all lines数组在所有行上只听一次
【发布时间】:2019-03-20 09:05:59
【问题描述】:

我的 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])
    );
}

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

【问题讨论】:

  • 你能显示更清晰的示例预期输出吗?
  • 是的,这就是我得到的...... ip-s 不同但结果是一样的...... i68.tinypic.com/30lykie.jpg
  • 您需要从 MySQL 获取所有信息吗?然后向我们展示表结构和查询,并告诉我们问题是什么

标签: php mysql sql arrays pdo


【解决方案1】:

您在每次迭代中将相同的数组(覆盖数据)重新分配到 $servers - 您最好将每一行附加到结果数组中。

考虑以下几点:

foreach($result as $k => $row) {
    $key = 'server ' . $k; // as "server 1", "server 2" etc...
    $servers[$key] = array('cs', $row[9], $row[10]);
}

现在你可以在$servers看到你的结果

已编辑

如果您希望每个玩家都在新行中,请在嵌套的 for 循环中插入 <td>

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>"; 
    } 
}

【讨论】:

  • 是的,现在正在工作,最后一件事是我并排获得所有结果,而不是每行必须有一个结果。例如:ibb.co/r7GS0f1
  • @TatuEugen 你是什么意思并排?我看到了图像 - $servers 数组是什么样的? (在没有访问实际数据的情况下很难给你想要的结构......)
  • foreach($result as $k =&gt; $row) { $key = 'server' . $k; // as "server 1", "server 2" etc... $servers[$key] = array('cs', $row[9], $row[10]); } foreach($result as $row) { echo "&lt;tr&gt;&lt;td align='center'&gt;$row[17]&lt;/td&gt;&lt;td align='left'&gt;$row[1]&lt;/td&gt;&lt;td align='center'&gt;$row[9]:$row[10]&lt;/td&gt;"; foreach ($results as $r) { echo "&lt;td align='center'&gt;".$r['num_players']."/".$r['max_players']."&lt;/td&gt;"; echo "&lt;td align='center'&gt;".$r['map']."&lt;/td&gt;&lt;/tr&gt;"; } }
  • @TatuEugen 不太清楚 - 但我想我理解了 - 编辑了我的帖子。如果它对您有帮助,您可以考虑将其标记为“已接受”,以便其他人可以使用它
  • 谢谢,我做了一些事情,但我仍然无法将 sql 中的行与服务器详细信息中的行结合起来,如果我使用两个 foreach 我会得到双重结果,一个 foreach 我会得到类似:@987654322 @ ,但我必须选择一个,sql 或 live details
【解决方案2】:

您不清楚“服务器名称”(例如“服务器 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']);
}

【讨论】:

  • CS 和服务器 1 就在那里,不是来自任何地方,只是 row[1] 来自 sql db。谢谢!
猜你喜欢
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多