【发布时间】:2016-07-18 19:09:39
【问题描述】:
我正在用 PHP 编写一个程序(因为它将伴随数学评分系统的 Web 代码),我需要创建一个字符串数组和数组。具体来说,我想转换类似
((4)+((5)*(pi)))-((9)*(sqrt(3)))
到
[["4", ["5", "pi", "*"], "+"], ["9", ["3", "sqrt"], "*"], "-"]
这是一种反向抛光符号的数组格式。有了这个,我将评估跨运算符的交换性,以将正确的、存储的答案与学生的答案进行比较。但是,由于行的不均匀性,我无法在 PHP 中使用多维数组执行此操作。
如果有使用字符串的方法,那将更有帮助(因为我计划将结果存储在 SQL 数据库中),但为此我可能会使用 serialize()。
感谢您的帮助。
编辑:我想我让它工作了。使用短数组表示法似乎会导致问题。旧的array() 符号似乎可以正常运行,如下所示:
array(array("4", array("5", "pi", "*"), "+"), array("9", array("3", "sqrt"), "*"), "-")
序列化符号(用于存储在数据库中)是:
a:3:{i:0;a:3:{i:0;s:1:"4";i:1;a:3:{i:0;s:1:"5";i:1;s:2:"pi";i:2;s:1:"*";}i:2;s:1:"+";}i:1;a:3:{i:0;s:1:"9";i:1;a:2:{i:0;s:1:"3";i:1;s:4:"sqrt";}i:2;s:1:"*";}i:2;s:1:"-";}.
【问题讨论】:
-
为什么
sqrt(3)没有分解成[3, "sqrt"]`? -
由于您使用的是 RPN,因此您不需要对任何内容进行分组。您应该能够使用简单的平面数组。
-
这可能对你有帮助:github.com/andig/php-shunting-yard
-
@trincot 我的错误,已编辑。
-
@NovaDenizen 那么我将如何评估可交换性?
标签: php arrays postfix-notation