Ping状态最大玩家数量代码?

时间:2013-11-16 05:04:57

标签: php

我不知道如何以简短的方式说出标题,但在PHP方面我是新手,所以我想知道是否有人可以帮助确定我做错了什么。

我正在努力实现的是一个Minecraft服务器网络 - 通过ping每个服务器告诉人们可以在线的最大玩家总数是多少,并且通过手动设置的最大值,只打印玩家的数量(以便我以后可以实现它。)

这就是我一直在搞乱(原谅我的变量= D):

<?php
$timecraftip = '76.92.80.28';
$timecraftport = 25567;
$timecraftcheckSock = @fsockopen($timecraftip, $timecraftport, $empty, $empty, 1);
$infiniteempireip = '63.135.57.11';
$infiniteempireport = 25565;
$infiniteempirecheckSock = @fsockopen($infiniteempireip, $infiniteempireport, $empty, $empty, 1);
$extremegamingip = '192.95.32.36';
$extremegamingport = 25700;
$extremegamingcheckSock = @fsockopen($extremegamingip, $extremegamingport, $empty, $empty, 1);

if($timecraftcheckSock !== FALSE)
    {
    $timecraft = 1;
    }else{
    $timecraft = 0;
    }
if($infiniteempirecheckSock !== FALSE)
    {
    $infiniteempire = 1;
    }else{
    $infiniteempire = 0;
    }
if($extremegamingcheckSock !== FALSE)
    {
    $extremegaming = 1;
    }else{
    $timecraft = 0;
    }

if($timecraft = 1 && $infiniteempire = 1 && $extremegaming = 1)
    {
    echo '130';
    }
if($timecraft = 1 && $infiniteempire = 1 && $extremegaming = 0)
    {
    echo '70';
    }
if($timecraft = 1 && $infiniteempire = 0 && $extremegaming = 1)
    {
    echo '110';
    }
if($timecraft = 0 && $infiniteempire = 1 && $extremegaming = 1)
    {
    echo '80';
    }
if($timecraft = 1 && $infiniteempire = 0 && $extremegaming = 0)
    {
    echo '50';
    }
if($timecraft = 0 && $infiniteempire = 1 && $extremegaming = 0)
    {
    echo '20';
    }
if($timecraft = 0 && $infiniteempire = 0 && $extremegaming = 1)
    {
    echo '60';
    }
if($timecraft = 0 && $infiniteempire = 0 && $extremegaming = 0)
    {
    echo '0';
    }
?>

到目前为止,无论服务器状态如何,它都会打印“130”。

非常感谢任何和所有帮助!

1 个答案:

答案 0 :(得分:0)

首先,您需要整理数据。想想这个问题。让你的代码更有意义。我们有三台服务器,每台服务器都有一个IP,一个端口和一些可以播放的播放器

<?php
  $servers = ['timecraft' => 
                        [ 'ip' => '76.92.80.28', 'port' => 25567, 'players' => 50], 
              'infiniteempire' => 
                        [ 'ip' => '63.135.57.11', 'port' => 25565, 'players'=>20],
              'extremegaming' => 
                        [ 'ip' => '192.95.32.36', 'port' => 25700, 'players'=>60]
             ];

现在,因为我们显然需要做的就是获得这些服务器的整体价值,基于它对fsockopen的响应,我们可以使用array_reduce函数,它将数组减少为单个值:

  $players = array_reduce($servers, function($total, $server) {
               if (@fsockopen($server['ip'], $server['port'], '', '', 1) {
                   $total += $server['players'];
               }
               return $total;
           });

这遍历每个服务器,并将值传递给我们提供的函数,并在$total中存储结果。无论array_reduce返回什么,我们都会保存在$players

现在,我们只需要回应结果:

echo $players;