尝试将字符串拆分为3个变量,但有点棘手-PHP

尝试将字符串拆分为3个变量,但有点棘手-PHP,php,Php,在基本上涵盖了PHP的基础知识之后,我决定挑战自己,制作一个简单的计算器。经过几次尝试,我终于明白了,但我并不完全满意。我想让它更人性化,让计算器只在一个框中输入,就像谷歌搜索一样 所以我们可以简单地输入:5+2 收到7张 如何将字符串“5+2”拆分为三个变量,以便数学函数可以将数字转换为整数并识别运算符,同时考虑到可能有人在值之间使用空格 你能拆开绳子吗?但是如果没有空间,你会用什么爆炸呢? 我也偶然发现了preg_split函数,但我似乎不知道它是否适合解决这个问题。什么方法是最好的选择?您

在基本上涵盖了PHP的基础知识之后,我决定挑战自己,制作一个简单的计算器。经过几次尝试,我终于明白了,但我并不完全满意。我想让它更人性化,让计算器只在一个框中输入,就像谷歌搜索一样

所以我们可以简单地输入:5+2 收到7张

如何将字符串“5+2”拆分为三个变量,以便数学函数可以将数字转换为整数并识别运算符,同时考虑到可能有人在值之间使用空格

你能拆开绳子吗?但是如果没有空间,你会用什么爆炸呢?
我也偶然发现了preg_split函数,但我似乎不知道它是否适合解决这个问题。什么方法是最好的选择?

您必须使用正则表达式拆分字符串。 例如,5+2的简单正则表达式是:

\d\+\d

看看这个。您可以在那里创建并验证正则表达式。对于计算器来说,这并不难。

您可能需要使用一些聪明的正则表达式来拆分它,例如:

$myOutput=split((([0-9]+)|([+-*/]{1})|([0-9]+))


我还没有测试过这一点-只是一个半虚拟的例子对不起:->只是想强调你需要记住你的-(负号)运算符可以出现在整数的开头,使其成为负数,这样您可能会遇到诸如-1--21之类的问题,这是有效的,但会使您的正则表达式规则更加复杂。

您对preg\u split的想法是正确的。它的工作原理如下:

$values = preg_split("/[\s]+/", "76  +    23");
结果数组将包含非空白的值:

值应如下所示: $values[0]:“76” $values[1]:“+” $values[2]:“23”

“/[\s]+/”是一种正则表达式模式,可与任何空格字符匹配一次或多次。但是,如果根本没有空格,preg_split将只返回原始的“5+2”,作为数组第一个元素中的单个字符串。i、 e:

$values[0] = "5+2"
这是我的出价,结果是

Array
(
    [0] => 5
    [1] => *
    [2] => 2
    [3] => +
    [4] => 53
)

只需循环遍历字符串中的所有字符,找出什么是什么。出于好奇,在一个示例中,您将如何执行此操作?一旦数据被分离,您计划对其执行什么操作?我建议通过创建一个带有按钮的javascript计算器,让它变得更轻松、更酷(IMO),这样在发布时所有内容都已经分离。给他们一个文本框的自由范围要困难得多,因为这样你就可以很好地制作一个数学解析器了,这可能非常困难(不过,可能有一些现有的解析器可以帮助实现这一点,比如PHPExcel)。示例:if($operator='+'){($number1+$number2);}这些值将在拆分后分配给变量。我只是觉得我可以做一些很酷的事情,然后学习一些新的东西。很好的资源,谢谢!最后是一些可以帮助我理解正则表达式的东西。虽然这可能是你能得到的最好答案,但我只想指出,PHP并不是真正为像这样的低级东西而构建的。也就是说,PHP的“完美”(如“重大安全漏洞”)计算器应该是$result=eval($expression),再加上@vassilis所说的,最好是花时间制作一个正则表达式,验证实际数学表达式的表达式,然后将其传递给eval()。我想我也可以这样做。
Array
(
    [0] => 5
    [1] => *
    [2] => 2
    [3] => +
    [4] => 53
)