$result = [
['all_fields' => 'region=Омская область,city=омск'],
['all_fields' => 'region=Челябинская область,city=челябинск'],
];
$data = array_map(
fn($str) => array_reduce(
explode(',', $str),
function ($acc, $cur) {
[$key, $val] = explode('=', $cur);
$acc[$key] = $val;
return $acc;
},
[],
),
array_column($result, 'all_fields'),
);
print_r($data);
Array (
[0] => Array (
[region] => Омская область
[city] => омск
)
[1] => Array (
[region] => Челябинская область
[city] => челябинск
)
)
WITH RECURSIVE `subs` (`name`, `value`, `order`) AS (
SELECT CONCAT('{{> ', `p`.`name`, '}}'), `p`.`value`, ROW_NUMBER() OVER ()
FROM `templates` AS `t`
JOIN `parts` AS `p`
ON `t`.`value` LIKE CONCAT('%{{> ', `p`.`name`, '}}%')
WHERE `t`.`id` = 1
),
`result` (`value`, `order`) AS (
SELECT `value`, 0
FROM `templates`
WHERE `id` = 1
UNION SELECT REPLACE(`r`.`value`, `s`.`name`, `s`.`value`), `s`.`order`
FROM `result` AS `r`
JOIN `subs` AS `s`
ON `s`.`order` = `r`.`order` + 1
)
SELECT `value`
FROM `result`
ORDER BY `order` DESC
LIMIT 1
console.log(1 + 2 + 3 + 4 + 5);