【问题标题】:Process string equation with variable names without $ sign使用不带 $ 符号的变量名称处理字符串方程
【发布时间】:2014-11-10 08:19:11
【问题描述】:

我曾尝试使用搜索功能来解决我的用例,但我无法找到与我类似的情况。请帮我解决这个问题。

我目前正在开发一个网页,该网页从 2 个包含名称和数字的文本文件中读取到不同的数组中。 为了便于解释,假设:

$namesarray = array("x","y");
$valuesarray = array("3","2");

我还有一个单独的数组,其中包含从这样的文本文件导入的公式:

$formulaname = array("data1","data2");
$formula = array("x+2","x+y");

所以用数学术语来说,公式可以写成:

data1 = x+2
data2 = x+y

我想做的是在调用data2时做这样的计算:

$data2 = $x + $y;

我希望 php 自动将 3 和 2 分别用于公式的 x 和 y,尽管公式没有任何 $ 符号来表示 x 和 y 作为变量。

这样的情况会发生吗?我已经研究过 matheval 和 eval 但我不太确定它们是否可以用于我的情况。

感谢您的帮助。 :)

【问题讨论】:

    标签: php formula equation


    【解决方案1】:
    $namesarray = array("x","y");
    $valuesarray = array("3","2");
    $data = array_combine(
        $namesarray,
        $valuesarray
    );
    extract($data);
    

    将使用正确的值创建您的 $x$y 变量;

    虽然使用基本的$data 数组及其xy 键可能更好,但如果这是用户输入的公式,使用eval() 肯定有风险

    【讨论】:

    • 感谢您的建议。这解决了我的部分名称和值是字符串而不是变量的问题。
    • 但是,有没有办法让 php 自动识别诸如 x+y 之类的字符串公式,并使用 $x 和 $y 的相应值,而不是将方程视为一个字符串?再次感谢您的帮助:)
    • 查看this question接受的答案
    • 调车场算法看起来确实很有趣,但我认为它仍然需要我在公式中包含变量才能有 php $ 符号。如示例中所示,$answer = $math->evaluate('($a + 3) * 4');,它可以评估以 'a' 作为变量的方程,但前提是它前面有一个美元符号。我手头的主要问题是公式没有美元符号,因为它们只是从文本文件中读取的。是否有任何方法可以可靠地解析带有一些变量但前面没有 $ 符号以将它们表示为 php 变量的公式?再次感谢您的光临。
    • 它只要求变量在公式中具有前导$,这是对正则表达式的简单修改以消除它....它至少应该为您提供一个起点从工作
    【解决方案2】:

    你可以使用关联数组,f.e.:

    $variables = array('x' => 3, 'y' => 2);
    $data1 = $variables['x'] + 2;
    $data2 = $variables['x'] + $variables['y'];
    

    【讨论】:

    • 感谢您的建议。但是,我遇到的问题是方程(即 x+y)是从文本文件中读取的,因此它是字符串格式。定义每个方程是不可行的,因为每个文本文件大约有 200 多个方程,并且我们有很多文本文件,具体取决于用户所做的选择。
    • @user2749222 但是.. 如果您想使用变量 - 您还需要定义所有变量
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多