我的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个案例,它太长了。我尝试了一些快捷方式,但它们并没有按照我想要的方式工作。有什么选择可以用更少的代码来编写吗?非常感谢
答案 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_filter
与current
结合使用以获取给定端口的数组索引。
$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}
]
}