访问PHP7对象属性
我有以下数组访问PHP7对象属性,php,arrays,codeigniter,Php,Arrays,Codeigniter,我有以下数组 $arrdata = array("CTypeID","TypeName","CTYPES","CID","COURSES","CTypeID"); 此数组受一个函数约束:Generic2DataSideBar($arrdata) 被调用函数的定义如下: function Generic2DataSideBar($data) { //a generic array for data.. //var_dump($data); $sdata= array();
$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;
}
该函数在PHP5.6.3中运行良好,但当我升级到PHP7时,行$da=“SELECT”$data[3]”来自“$data[4]”,其中“$data[5]”为“=””””””$key->$data[0]”
带来了一个问题,即$key->$data[0]
返回'
除该部分外,所有值都正常。在PHP7中,只要“Data”是有效的属性名,就不能有类似于$key->“Data”的东西吗?谢谢正如您在中所看到的,$key->$data[0]
的解释从PHP5更改为PHP7(表的第二行)
为了获得与PHP 5相同的结果,您可以执行以下操作之一:
在变量中提取$data[0]
,并改用该变量:
$field = $data[0];
"... WHERE ".$data[5]."='".$key->$field."'";
使用大括号将需要首先计算的子表达式分组:
"... WHERE ".$data[5]."='".$key->{$data[0]}."'";
这两种方法都与PHP5兼容,并且不会改变PHP5上代码的行为。正如您在中看到的,$key->$data[0]
的解释从PHP5更改为PHP7(表的第二行)
为了获得与PHP 5相同的结果,您可以执行以下操作之一:
在变量中提取$data[0]
,并改用该变量:
$field = $data[0];
"... WHERE ".$data[5]."='".$key->$field."'";
使用大括号将需要首先计算的子表达式分组:
"... WHERE ".$data[5]."='".$key->{$data[0]}."'";
这两种方法都与PHP5兼容,并且不会改变PHP5上代码的行为。请尝试使用($key->$data)[0]
并检查变量处理中的向后不兼容,谢谢,但这不起作用。生成相同的结果请尝试使用($key->$data)[0]
并检查变量处理中的向后不兼容,谢谢,但这不起作用。生成与选择使用选项2相同的结果。非常干净,没有更多的内存分配。它就像一个符咒!谢谢。选择使用选项2。非常干净,没有更多的内存分配。它就像一个符咒!非常感谢。