我正在尝试从php配置生成防火墙模板
我有这个数组
$config=array('1024','3306','3804','127017');
我想要这个输出
1024:3305
3307:3803
3805:127017
如您所见,第一个和最后一个值保持不变,其间的值为-1 / +1
我想我能做到但不能干净利落, 我试图操纵数组,但我猜错了,因为代码太冗长了
你能帮忙吗?感谢
答案 0 :(得分:1)
$config=array('1024','3306','3804','127017');
$output = [];
foreach ($config as $k => $port) {
if (isset($config[$k+1])) {
$output[] = ($k ? $port + 1 : $port)
. ':'
. (isset($config[$k+2]) ? ($config[$k + 1] - 1) : $config[$k + 1]);
}
}
echo implode("<br>", $output);
答案 1 :(得分:0)
$config=array('1024','3306','3804','127017');
for ($i=0; $i<sizeof($config); $i++) {
if ($i == 0) {
echo $config[$i] . ":";
} elseif($i == (sizeof($config)-1)) {
echo $config[$i];
} else {
echo ($config[$i]-1)."<br />".($config[$i]+1).":";
}
}
答案 2 :(得分:0)
我建议首先将值存储在关联数组中,以便您可以将此数据用于进一步操作。输出第二步:
$config = ['1024','3306','3804','127017'];
$result = [];
for ($i = 0, $count = count($config) - 2; $i <= $count; ++$i)
{
$key = $i == 0 ? $config[$i] : $config[$i] + 1;
$value = $i == 0
? $config[$i + 1] - 1
: (
$i == $count ? $config[$i + 1] : $config[$i + 1] - 1
);
$result[$key] = $value;
}
// Output it:
foreach ($result as $key => $value)
{
echo "$key:$value <br>";
}
答案 3 :(得分:0)
简单地:
<?php
$config=array('1024','3306','3804','127017');
$c = count($config);
for ($n = 0; $n<$c-1; $n++) {
printf(
'%d:%d'.PHP_EOL,
($n==0 ? $config[0] : $config[$n]+1), // use incremented value if not first
($n==$c-2 ? $config[$c-1] : $config[$n+1]-1) // use decremented value if not last
);
}
如果您想要输出到浏览器,则必须在<br>
模板中添加printf()
标记。