Если я вас правильно понял, то что-то вроде этого:
<?php
$arr = [
[
'result' => 'a',
'components' => [
2,
41
],
'formula' => '2 + 41',
'answer' => 43
],
[
'result' => 'd',
'components' => [
'a',
1
],
'formula' => 'a - 1',
'answer' => ''
]
];
$resultArr = doReplacement($arr);
var_dump($resultArr);
function doReplacement(array $arr)
{
foreach ($arr as &$item)
{
$components = &$item['components'];
$formula = &$item['formula'];
foreach ($components as &$component)
{
if (!is_numeric($component))
{
$value = findComponentValue($arr, $component);
$formula = str_replace($component, $value, $formula);
$component = $value;
}
}
if (empty($item['answer']))
{
// calculate formula
}
}
return $arr;
}
function findComponentValue(array $arr, $component)
{
$value = 0;
foreach ($arr as $item)
{
$result = $item['result'];
if ($result == $component)
{
$value = intval($item['answer']);
}
}
return $value;
}
Сам код подсчета формулы я писать не стал. Быстрое решение - с использованием eval, но это большое зло. По уму нужно парсить строку и вычислять значение. Возможно вот эта ссылочка сможет помочь
stackoverflow.com/questions/18880772/calculate-mat...