PHP变量未定义为eval函数

问题描述

我不熟悉 PHP 和编码。 目前我正在尝试制作一个简单的计算器。 为此,我有两个脚本calculator.PHP 和array.PHP 我的想法是将用户提供的所有输入存储在一个数组中,以便我可以使用 eval() 函数计算它们。因为我需要一个字符串,所以我使用 foreach 循环转换了数组。 但是当我尝试在 foreach 循环之外使用变量时,我收到以下错误

注意:第17行数组到字符串的转换 大批 解析错误:语法错误,意外的 ';',在 /Applications/XAMPP/xamppfiles/htdocs/dashboard/array.PHP(22) 中期待 '(' : eval()'d 代码在第 1 行

我该怎么做才能解决这个问题?

array.PHP

library(tidyr)
crossing(ID,Var2 = factor(Var2,levels = Var2))

calculator.PHP

#   ID    Var2 
#   <chr> <chr>
# 1 A     T_X  
# 2 A     X_F  
# 3 A     R_X  
# 4 A     T_Y  
# 5 A     Y_F  
# 6 A     R_Y  
# 7 B     T_X  
# 8 B     X_F  
# 9 B     R_X  
# 10 B     T_Y  
# 11 B     Y_F  
# 12 B     R_Y  

解决方法

您反复将整个 $_SESSION 变量与 $_SESSION['persistentValues'] 混淆。后者是您在提交按钮时按住按钮的位置。

$value 的值是一个数组,因为您要循环遍历 $_SESSION 来设置它,而会话变量的值是一个数组。 eval() 的参数是一个字符串,当您将数组转换为字符串时,它变成了字符串 Array,它不是一个可以计算的表达式。

您可以使用 implode() 将数组的所有元素连接成一个字符串。因此,如果会话数组包含 ['9','3','+','8'],它会将 $value 设置为 '93+8',然后您可以将其传递给 eval()

eval() 的参数需要是一个语句。所以你应该把 echo 命令放在参数中。

<?php
session_start();

if (!is_array($_SESSION['persistentValues'])) {
    $_SESSION['persistentValues'] = array();
}

if (isset($_POST['button'])) {
    $_SESSION['persistentValues'][] = $_POST['button'];
}

$value = implode('',$_SESSION['persistentValues']);
echo $value;

if (isset($_POST["result"])) {
  eval("echo $value;");
}
?>