从php数组生成输出

时间:2015-12-10 15:52:17

标签: php arrays operations

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

我有这个数组

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

我想要这个输出

1024:3305
3307:3803
3805:127017

如您所见,第一个和最后一个值保持不变,其间的值为-1 / +1

我想我能做到但不能干净利落, 我试图操纵数组,但我猜错了,因为代码太冗长了

你能帮忙吗?

感谢

4 个答案:

答案 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()标记。

See it in action.