从php数组生成输出


generate output from php array

我正在尝试从php配置生成防火墙模板

我有这个阵列

$config=array('1024','3306','3804','127017');

我想要这个输出

1024:3305
3307:3803
3805:127017

正如你所看到的,第一个和最后一个值保持不变,中间的值是-1/+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);
$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).":";
    }
}

我建议先将值存储在关联数组中,这样您就可以使用这些数据进行进一步的操作。在第二步输出:

$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>";
}

简单地说:

<?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
    );
}

如果要输出到浏览器,则必须在printf()模板中添加<br>标记。

看看它在行动中。