Комбинация array_splice и array_chunk сделает свое дело.
$new = array_merge(array_splice($arr, 0,1), array_chunk($arr, 4, true));
var_export($new);
Вывод:
array (
'relation' => 'AND',
0 =>
array (
'key1' => 'Demo',
'value1' => 'demo',
'compare1' => '=',
'type1' => 'NUMERIC',
),
1 =>
array (
'key2' => 'test',
'value2' => 'test',
'compare2' => '=',
'type2' => 'NUMERIC',
),
)
https://3v4l.org/eaqpk
Если вам нужно удалить 1и 2 в ключах, тогда вы можете зациклить массив и использовать array_combine для замены ключей
foreach($new as &$a){
if(is_array($a)) $a = array_combine(["key", "value", "compare", "type"],$a);
}
https://3v4l.org/LQil4
Соединить массив и использоватьpreg_match для разделения слова и числа в ключе.
Добавьте значение к «номеру ключа -1» в массиве результатов.
$new = array_splice($arr, 0,1);
foreach($arr as $k => $v){
preg_match("/(.*?)(\d+)/", $k, $m);
$new[$m[2]-1][$m[1]] = $v;
}
var_export($new);
https://3v4l.org/CHLGT