数组在所有行上只听一次
Posted
技术标签:
【中文标题】数组在所有行上只听一次【英文标题】: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 获取所有信息吗?然后向我们展示表结构和查询,并告诉我们问题是什么 【参考方案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 => $row) $key = 'server' . $k; // as "server 1", "server 2" etc... $servers[$key] = array('cs', $row[9], $row[10]); foreach($result as $row) echo "<tr><td align='center'>$row[17]</td><td align='left'>$row[1]</td><td align='center'>$row[9]:$row[10]</td>"; foreach ($results as $r) echo "<td align='center'>".$r['num_players']."/".$r['max_players']."</td>"; echo "<td align='center'>".$r['map']."</td></tr>";
@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。谢谢!以上是关于数组在所有行上只听一次的主要内容,如果未能解决你的问题,请参考以下文章
如何使用SQL或Python在Amazon Redshift中从Amazon Snow雪花重新创建数据库表? (一次重新创建所有ot,而不是一次一遍地创建)