$formula = preg_match_all('/\[(.+?)\]/', $request->formula, $matches);
Array
(
[0] => Array
(
[0] => [string1]
[1] => [string2]
)
[1] => Array
(
[0] => string1
[1] => string2
)
)
// шаблон в формуле
$pattern = '[string] * [string] * 0.2';
// определяем число плейсхолдеров - подстановочных мест для параметров
$placeholder_count = substr_count($pattern, '[string]');
$input_params = []; // массив входных параметров
// заполняем массив входных параметров по кол-ву подстановочных мест
for($i = 0; $i < $placeholder_count; $i++)
{
// имитация процесса получения входных параметров из другого источника
$input_params[] = floatval('1.32453' + $i);
// если параметры получают в виде строковых значений,
// то их нужно обязательно пропускать через функции floatval или intval,
// чтобы экранировать значения и недопустить попадания в шаблон чего-то,
// кроме целых или вещественных чисел
}
// создаем выходной шаблон для подстановки параметров
$out_pattern = $pattern;
// производим подстановку параметров из массива
for($i = 0; $i < $placeholder_count; $i++)
{
$out_pattern = str_replace('[string]', $input_params[$i], $out_pattern);
}
// выполняем выходной шаблон как строку кода PHP.
// Результат выполнения спроецируется в переменную $exec_result
eval('$exec_result = '.$out_pattern.';');
// смотрим пошагово, что происходит
echo 'pattern: '.$pattern."\n";
echo 'placeholder_count: '.$placeholder_count."\n";
echo 'input_params: '.print_r($input_params, true)."\n";
echo 'out_pattern: '.$out_pattern."\n";
echo 'exec_result: '.$exec_result."\n";