数组在所有行上只听一次

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 =&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。谢谢!

以上是关于数组在所有行上只听一次的主要内容,如果未能解决你的问题,请参考以下文章

如何使用SQL或Python在Amazon Redshift中从Amazon Snow雪花重新创建数据库表? (一次重新创建所有ot,而不是一次一遍地创建)

一次一密加密解密算法

python将列表里的字符串一次一次显示出来

科学在一次一次的葬礼中进步

如何避免ConcurrentModificationException听一次监听器的情况

RXJS combineLatest running pipe 7 次一次发射