Теперь parse_url
не будет работать для вашего случая, так как будет перезаписывать дублирующиеся записи. Вы должны вручную извлечь и сгруппировать здесь.
$str = 'decoded_name=0=&task=rose&duration=1.25&user=15&1=&task=daisy&duration=0.75&user=25&2=&task=orchid&duration=1.15&user=7';
preg_match_all('#(\w+)=([^&=]*)(?:&|$)#', $str, $matches, PREG_SET_ORDER);
$result = array();
$i = 0;
foreach ($matches as $m) {
list(, $key, $value) = $m;
if (!strlen($value)) {
$i = (int)$key;
}
else {
$result[$i][$key] = $value;
}
}
Хитрость заключается в том, чтобы следить за числовыми клавишами (без значения), которые разделяют ваши группы. Цикл сгенерирует следующий вложенный массив:
[0] => Array
(
[task] => rose
[duration] => 1.25
[user] => 15
)
[1] => Array
(
[task] => daisy
[duration] => 0.75
[user] => 25
)
[2] => Array
(
[task] => orchid
[duration] => 1.15
[user] => 7
)