我有以下数组
$arrdata = array("CTypeID","TypeName","CTYPES","CID","COURSES","CTypeID");
这个数组有一个函数:Generic2DataSideBar($arrdata);
被调用函数的定义如下:
function Generic2DataSideBar($data)
{
//a generic array for data..
//var_dump($data);
$sdata= array();
//this is the function for generating depended data...
$this->load->model("Commons");
$dat="SELECT ".$data[0].",".$data[1]." FROM ".$data[2];
$result=$this->Commons->LoadResultSet($dat);
//Looping through the resultset
foreach ($result as $key) {
//get the number of departments
$da="SELECT ".$data[3]." FROM ".$data[4]." WHERE ".$data[5]."='".$key->$data[0]."'";
$dat=count($this->Commons->LoadResultSet($da));
$r=array($key->$data[1], $dat);
array_push($sdata, $r);
}
header("content-type: application/json");
$sdata=json_encode($sdata);
return $sdata;
}
这个函数在PHP 5.6.3中运行良好但是当我升级到PHP 7时,行$da="SELECT ".$data[3]." FROM ".$data[4]." WHERE ".$data[5]."='".$key->$data[0]."'";
带来了一个问题,$key->$data[0]
返回''
所有值都没问题,除了部分。在PHP 7中,不能像$key->"Data"
这样长的时间"数据"是有效的属性名称?感谢
答案 0 :(得分:2)
正如您在documentation中看到的那样,$key->$data[0]
的解释从PHP 5变为PHP 7(表格的第二行)。
为了获得与PHP 5相同的结果,您可以执行以下操作之一:
在变量中提取$data[0]
并改为使用该变量:
$field = $data[0];
"... WHERE ".$data[5]."='".$key->$field."'";
使用花括号对需要首先评估的子表达式进行分组:
"... WHERE ".$data[5]."='".$key->{$data[0]}."'";
这两种方式都与PHP 5兼容,并且不会改变PHP 5上代码的行为。