@Palladi_N
dev

Сложение вычитание умножение в одной строке где арифметические символы — это переменные PHP?

Приветствую. Есть такая не очень стандартная и каверзная задача
Существуют две строки из которых я вытягиваю внутренние переменные и отдельно символы сложения умножения вычитания.
Пример:
$cs$+$rr40$*$bs$
$cs$ - каждая переменная имеет за собой свое значение

Как сделать арифметическую операцию с этой строкой если + - * так же переменные

$formula = $_POST['formula_product_price']; // вот тут некая формула по типу $cs$+$rr40$*$bs$

$ret_per = preg_replace ("/[^a-zA-ZА-Яа-я0-9-$\s]/"," ", $formula);
$str_c=$ret_per;
$str_c = str_replace("-"," ",$str_c);
list($c_a, $c_b, $c_c, $c_d, $c_f, $c_g, $c_h, $c_i, $c_j, $c_a, $c_k, $c_l, $c_m, $c_n) = explode(" ", $str_c); // так я разбиваю саму формулу на переменные(внутренние)

$ret_sim = preg_replace ("/[^+---*\s]/","", $formula);
list($s_a, $s_b, $s_c, $s_d, $s_f, $s_g, $s_h, $s_i, $s_j, $s_a, $s_k, $s_l, $s_m, $s_n) = explode(" ", $ret_sim);// так я разбиваю формулу на символы арифметические.

// ЭТО ПРИМЕР то что не работает и я не знаю как сложить вычесть и умножить данные в строке если это все переменные
$plus = $ret_sim[0]; // тут символ или + - *
$minus = $ret_sim[1]; // тут символ или + - *
$ret_r += $_POST[$c_a].$plus.$_POST[$c_b].$minus.$_POST[$c_с];

Помогите плииз.... уже моск сломан(((
  • Вопрос задан
  • 1055 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Как сделать арифметическую операцию с этой строкой если + - * так же переменные

заменить только их на реальные значения, а потом eval сделать на строку такого вида $cs+$rr40*$bs

Только $ в конце названия переменных надо убрать.
Ответ написан
@balamyt92
; select * from users; --
Ну можно как то так пойти
<?php
$_POST = [
    'cs'   => 1,
    'rr40' => 2,
    'bs'   => 3
];
$formula = '$cs$+$rr40$*$bs$';
$items = explode('$', $formula);
$operators = [
    '-' => function ($result, $var) {
        return $result - $var;
    },
    '+' => function ($result, $var) {
        return $result + $var;
    },
    '/' => function ($result, $var) {
        return $result / $var;
    },
    '*' => function ($result, $var) {
        return $result * $var;
    },
];

$result = 0;
$cur_operator = '+';
foreach ($items as $item) {
    if (!empty($item)) {
        if (array_key_exists($item, $operators)) {
            $cur_operator = $item;
        } else if (isset($_POST[$item])) {
            $result = $operators[$cur_operator]($result, $_POST[$item]);
        }
    }
}
echo $result;

но это если скобок не будет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы