я пытаюсь сгенерировать шаблон брандмауэра из конфигурации 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
);
}
Если вы хотите вывести в браузер, вам нужно будет добавить <br>
тег в printf()
шаблон.