//старый массив
$array=['key'=>'test1', 'value'=>'value1', 'key2'=>'test2', 'value2'=>'value2'];
//нужно переформатировать массив, это будет новый
$new_arr=[];
for($i=1; true; $i++){
//Это чтобы первое значение было key, а не key1
$suffix=$i==1 ? '' : $i;
if(array_key_exists('key'.$suffix, $array) && array_key_exists('value'.$suffix, $array)){
//добавляем новое значение
$new_arr[]=['key'=>$array['key'.$suffix], 'value'=>$array['value'.$suffix]];
} //если закончились массивы. Это в случае, если нумерация непрерывная, иначе стоит изменить именование полей в форме
else {break;}
}
echo json_encode($new_arr);
Это плохой неоптимизированный код, но я объяснил принцип. Но лучше посоветую именовать все поля в форме как key[] и value[].
Тогда их можно будет вытащить с помощью
foreach($_POST['key'] as $k=>$v) и переформатировать будет по-проще, типа так:
foreach($_POST['key'] as $k=>$v) {
$new_arr[]=['key'=>$v, 'value'=>$_POST['value'][$k]];
}
В данном коде вообще не учтена валидация полей на пустоту, xss-атаки и все прочее, имейте в виду.