有人可以帮助我减少我的PHP代码吗?

时间:2019-12-03 13:58:41

标签: php

我的HTML代码

<div id="port" align="center">
    <form  action="NetRulez.php" method="GET">
        <input type="number" name="i" value="" placeholder="enter real IP">
        <br/>
        <input type="number" name="port" value="<?php echo $port ?>" placeholder="enter port ID">
        <br/>
        <input type="submit" name="submit" value="Suche">       
    </form>
</div>

这是我的PHP

<?php

if(isset($_GET['submit']) && isset($_GET['port']))
{
  $port = $_GET['port'];

  switch($port)
  {
    case ($port>= "1024" && $port<= "2031"): 
      echo "0";
        break;
    case ($port>= "2032" && $port<= "3039"): 
      echo "1";
        break;
    case ($port>= "3040" && $port<= "4047"): 
      echo "2";
        break;
    case ($port>= "" && $port<= ""): 
      echo "3";
        break;
    case ($port>= "" && $port<= ""): 
      echo "4";
        break;
    case ($port>= "" && $port<= ""): 
      echo "5";
        break;
   case ($port>= "" && $port<= ""): 
      echo "6";
        break;
   case ($port>= "" && $port<= ""): 
      echo "7";
        break;
   case ($port>= "" && $port<= ""): 
      echo "8";
        break;
   case ($port>= "" && $port<= ""): 
      echo "9";
        break;
   case ($port>= "" && $port<= ""): 
      echo "10";
        break;
    case ($port>= "" && $port<= ""): 
      echo "11";
        break;
   case ($port>= "" && $port<= ""): 
      echo "12";
        break;
   case ($port>= "" && $port<= ""): 
      echo "13";
        break;
   case ($port>= "" && $port<= ""): 
      echo "14";
        break;
   case ($port>= "" && $port<= ""): 
      echo "15";
        break;
   case ($port>= "" && $port<= ""): 
      echo "16";
        break;
   case ($port>= "" && $port<= ""): 
      echo "17";
        break;
   case ($port>= "" && $port<= ""): 
      echo "18";
        break;
   case ($port>= "" && $port<= ""): 
      echo "19";
        break;
   case ($port>= "" && $port<= ""): 
      echo "20";
        break;
   case ($port>= "" && $port<= ""): 
      echo "21";
        break;
   case ($port>= "" && $port<= ""): 
      echo "22";
        break;
   case ($port>= "" && $port<= ""): 
      echo "23";
        break;
   case ($port>= "" && $port<= ""): 
      echo "24";
        break;
   case ($port>= "" && $port<= ""): 
      echo "25";
        break;


    default: //default
      echo "within no range";
        break;
  }
}

?>

我将输入其他范围的端口值。第三回声一直持续到64,根据下面的切换案例,我不得不写64个案例,它太长了。我尝试了一些快捷方式,但它们并没有按照我想要的方式工作。有什么选择可以用更少的代码来编写吗?非常感谢

3 个答案:

答案 0 :(得分:0)

使用具有范围的数组,如下所示:

$portRanges = [1024, 2031, 3039, 4047];

if(isset($_GET['submit']) && isset($_GET['port'])) {
    $port = $_GET['port'];
    foreach($portRanges as $key => $value) {
        if(array_key_exists($key+1, $portRanges) && $port >= $value && $port <= $portRanges[$key+1]) {
            echo $key;
            break;
        }
    }
}

答案 1 :(得分:0)

您可以使用具有端口范围的数组,并将array_filtercurrent结合使用以获取给定端口的数组索引。

$map = [
    ['from' => '1024', 'to' => '2031'],
    ['from' => '2032', 'to' => '3039'],
    // Add all ranges below
];

if(isset($_GET['submit'], $_GET['port'])) {
    $port = $_GET['port'];
    $index = current(array_filter($map, function ($value) use ($port) {
        return $value['from'] >= $port && $value['to'] <= $port;
    }));
}

答案 2 :(得分:0)

您可以使用以下代码


    <?php

    if(isset($_GET['submit']) && isset($_GET['port']))
    {
      $port = $_GET['port'];
      $json = file_get_contents("./port.json");
      $isValidPort = false;
      foreach($json as $obj){
        if($port>= $obj->min && $port<= $obj->max) {
           echo $obj->value;
           $isValidPort = true;
        }
      }
      if(!$isValidPort) {
        echo "within no range";
      }
    }

    ?>

port.json文件:

{
  [
    {min:'1024',max: '2031', value:'0'},
    {min:'2032',max: '3039', value:'1'},
    {min:'3047',max: '4047', value:''},
    ...
    {The last one with no ',' at the end}
  ]
}