PHP Foreach重复 - GameQ

时间:2015-11-25 12:13:00

标签: php loops foreach

我正在尝试使用GameQ创建一个游戏服务器PHP脚本来处理我的XenForo,因为没有我喜欢的。

我几乎可以使用它,但我在foreach中得到重复。 下面是我的代码,我已经删除了几乎所有的html代码,所以它主要是PHP代码。

    <?php

require '../GameQ.php';

$servers = array(
    array('id' => 'CSGO 1','type' => 'csgo','host' => '130.185.144.100:27015'),
    array('id' => 'CSGO 2','type' => 'csgo','host' => '173.199.73.230:27015'),  
    array('id' => 'Minecraft 1','type' => 'minecraft','host' => '85.236.100.111:28365'),
);

$gq = new GameQ();
$gq->addServers($servers);
$gq->setOption('timeout', 4); // Seconds
$gq->setFilter('normalise');
$results = $gq->requestData();

foreach ($results as $game) {   
    $game = $game['gq_type'];
    echo $game . '<br>';

    foreach ($results as $key => $server) {
        if ($server['gq_type'] == $game) {
            if ($server['gq_joinlink'] !='') {
                echo $server['gq_joinlink'] . '<br>';
            }
            echo $server['gq_hostname'] . '<br>';
            echo $server['gq_numplayers'] . '<br>';
            echo $server['gq_maxplayers'] . '<br>';
            echo $server['gq_mapname'] . '<br>';
            echo $server['gq_address'] . '<br>';
            echo $server['gq_port'] . '<br><br>';
        }
    }
    echo '<br><hr><br>';
}

?>

这是输出,但您会看到它正在输出csgo服务器的副本。

CSGO 蒸汽://connect/130.185.144.100:27015 / [MG-1] Mestro Surf |初学者 - Learn2Surf |高TR | FastDL 14 48 surf_mom 130.185.144.100 27015

蒸汽://connect/173.199.73.230:27015 / GameServers.com的RivalTide.com社区服务器 0 三十 de_dust 173.199.73.230 27015

CSGO 蒸汽://connect/130.185.144.100:27015 / [MG-1] Mestro Surf |初学者 - Learn2Surf |高TR | FastDL 14 48 surf_mom 130.185.144.100 27015

蒸汽://connect/173.199.73.230:27015 / GameServers.com的RivalTide.com社区服务器 0 三十 de_dust 173.199.73.230 27015

的Minecraft 欢迎使用Multiplay服务器! 0 8 世界 85.236.100.111 28365

任何人都可以提供帮助。

由于

1 个答案:

答案 0 :(得分:2)

你在同一个数组上循环两次:

foreach ($results as $game) {

foreach ($results as $key => $server) {

我认为第二个循环应该是

foreach ($game as $key => $server) {

修改

从代码中取出第二个foreach:

foreach ($results as $server) {
    $game= $server['gq_type'];
    echo $game. '<br>';

    if ($server['gq_type'] == $game) {
        if ($server['gq_joinlink'] !='') {
            echo $server['gq_joinlink'] . '<br>';
        }
        echo $server['gq_hostname'] . '<br>';
        echo $server['gq_numplayers'] . '<br>';
        echo $server['gq_maxplayers'] . '<br>';
        echo $server['gq_mapname'] . '<br>';
        echo $server['gq_address'] . '<br>';
        echo $server['gq_port'] . '<br><br>';
    }
    echo '<br><hr><br>';
}

这将阻止它回响两次。