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