Генерировать вывод из php массива

Я пытаюсь сгенерировать шаблон брандмауэра из конфигурации PHP

у меня есть этот массив

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

и я хотел бы этот вывод

1024:3305
3307:3803
3805:127017

как видите, первое и последнее значения остаются прежними, значения между -1 / +1

я думаю, что могу сделать это, но не чистым способом, я пытался манипулировать массивом, но неправильно, я думаю, потому что код слишком многословен

ты можешь помочь?

Спасибо

4 ответа

Решение
$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
    );
}

Если вы хотите вывести в браузер, вам нужно будет добавить <br> тег в printf() шаблон.

Смотрите это в действии.

Другие вопросы по тегам