Я пишу программу на PHP (так как она будет сопровождать веб-код для системы математической градации), и мне нужно создать массив строк и массивов. В частности, я хочу, чтобы преобразовать что-то вродеPHP массив строк и массивов
((4)+((5)*(pi)))-((9)*(sqrt(3)))
в
[["4", ["5", "pi", "*"], "+"], ["9", ["3", "sqrt"], "*"], "-"]
, который является массивом форматирования обратной-польской записи. С этим я бы оценил для коммутативности по операторам сравнение правильного, сохраненного ответа на ответ ученика. Тем не менее, я не могу сделать это на PHP с многомерными массивами из-за неравномерности строк.
Если есть способ сделать это с помощью строк, это будет еще более полезно (поскольку я планирую хранить результаты в базе данных SQL), но для этого я, вероятно, мог бы использовать serialize()
.
Спасибо за любую помощь.
EDIT: Я думаю, что у меня это получилось. По-видимому, использование коротких записей в массиве вызвало проблему. Старая 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 "'] '? – trincot
Поскольку вы используете RPN, вам не нужно ничего группировать. Вы должны иметь возможность использовать простой плоский массив. – NovaDenizen
Это может вам помочь: https://github.com/andig/php-shunting-yard – nikoskip