Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问PHP7对象属性_Php_Arrays_Codeigniter - Fatal编程技术网

访问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。非常干净,没有更多的内存分配。它就像一个符咒!非常感谢。