<?php
$string = 'My Interests:379{Commercial:0,Consumer:1,Wholesale Reseller:2},Test Group:1234{Test One:1,Test 2:2}';
$regex = '(?<group_name>[a-zA-Z0-9 _]+):(?<group_id>[0-9]+)(?={)|(?<=[{,])(?<option_name>[^:]+):(?<option_id>[^,}]+)(?=[,}])';
preg_match_all("/$regex/", $string, $matches);
//print_r($matches);
$groups = array_combine(array_filter($matches['group_name']), array_filter($matches['group_id'], function ($v) { return $v !== '';}));
$options = array_combine(array_filter($matches['option_name']), array_filter($matches['option_id'], function ($v) { return $v !== '';}));
print_r($groups);
print_r($options);
$output = array();
for ($i = 0; $i < count($matches['group_name']); $i++) {
if ($matches['group_name'][$i] != '') {
// new group
$this_group = $matches['group_name'][$i];
$output[$this_group] = array('id' => $matches['group_id'][$i]);
}
else {
// option for this group
$output[$this_group]['options'][$matches['option_name'][$i]] = $matches['option_id'][$i];
}
}
print_r($output);
$output = array();
$this_group = -1;
for ($i = 0; $i < count($matches['group_name']); $i++) {
if ($matches['group_name'][$i] != '') {
// new group
$this_group++;
$output[$this_group] = array('name' => $matches['group_name'][$i], 'id' => $matches['group_id'][$i]);
}
else {
// option for this group
$output[$this_group]['options'][$matches['option_name'][$i]] = $matches['option_id'][$i];
}
}
print_r($output);
preferences:
24.2 ms | 407 KiB | 5 Q