Вы можете значительно облегчить себе жизнь, переформатировав свою форму. Вы можете либо дать вашим полям ip и port явные индексы вместо того, чтобы полагаться на поведение [], либо вы можете связать каждый ip и порт в подполе большего массива.
(атрибуты и другие вещи, несущественные для примера, в примерах ниже опущены)
Вариант а:
<li><input name="ip[1]" />: <input name="port[1]" /></li>
<li><input name="ip[2]" />: <input name="port[2]" /></li>
<li><input name="ip[3]" />: <input name="port[3]" /></li>
<!-- etc -->
Это должно вернуть два массива, массив IP и массив портов, при этом индекс каждой строки будет одинаковым. Затем вы можете использовать foreach ($ip as $key => $val)
и использовать значение в $ key, чтобы получить соответствующее значение из массива Port.
Вариант b:
<li><input name="connection[][ip]" />: <input name="connection[][port]" /></li>
<li><input name="connection[][ip]" />: <input name="connection[][port]" /></li>
<li><input name="connection[][ip]" />: <input name="connection[][port]" /></li>
<!-- etc -->
Это должно вернуть один массив, каждая строка которого состоит из IP и порта, связанных вместе. Затем вы можете просто foreach над массивом.
foreach ($connection as $row)
{
var_dump ($row ['ip'], $row ['port']);
}