消息:无法在CodeIgnitor中将stdClass类型的对象用作数组

时间:2018-12-20 14:25:15

标签: php codeigniter-3

我正在使用CodeIgniter,我在模型中返回了多个值,所以我确实喜欢

return array('true' =>1,'customer_id' => $result->customer_id);

并且在控制器中,我显示为

$true=$result['true'];
$custId=$result['customer_id'];

所以这没有问题。

现在让我们详细讨论

在模型中,我有这个逻辑

//sql query
if ($result) {
    if ($result->password_change == 0) {
         return array('true' =>1,'customer_id' => $result->customer_id);//multiple returns
    }
    else{
       return $result;
    }
}
else{return false;}

在控制器中

 $result=$this->Member_model->check_data(parameters);
 $true=$result['true'];
 $custId=$result['customer_id'];

 if ($result) {
     if($true == 1){
         //some code here
     }
     else{
         //some code here
     }
 }
 else{
 }

这是我的第二个代码。

if ($result) {
  if ($result - > password_change == 0) {
    if ($result - > id == $id) {
      return array('true' => 1, 'customer_id' => $result - > customer_id); //return more then 2
    } else {
      return false;
    }
  } else {
    if ()) // some condition
  {
    return (array) $result;
  } else {
    return false;
  }
}
} else {
  return false;
}

我得到的错误

  

“消息:不能将stdClass类型的对象用作数组”

因为从条件中返回条件(从模型中)然后它正在工作,但是当它返回其他条件(我是从模型中返回$ result)时,我得到了错误,因为它没有得到$ result ['true']。

希望您能理解我的问题。您能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您有两个选择。或者:总是返回一个数组,或者返回一个ArrayObject:

总是返回一个数组

在其他情况下,将$result转换为数组:

//sql query
if ($result) {
    if ($result->password_change == 0) {
         return array('true' =>1,'customer_id' => $result->customer_id);//multiple returns
    }
    return (array) $result;
}
return false;

始终返回ArrayObject

不知道该模型是否在应用程序中的其他任何地方返回结果,我不知道其他代码是否期望$result是一个对象。转换为数组可能会在其他地方破坏您的代码。让我们将$result的{​​{1}}转换为stdClass

ArrayObject

此方法将允许您调用//sql query if ($result) { if ($result->password_change == 0) { return array('true' =>1,'customer_id' => $result->customer_id);//multiple returns } return new \ArrayObject($result, \ArrayObject::ARRAY_AS_PROPS); } return false; $result['test']

答案 1 :(得分:1)

Yeah, ok this is solution for multiple conditions : 

    $this->db->select('*'); // Here your column name
    $this->db->from('members'); // Table name
    $this->db->where($login_access); // Here your condition
    $query = $this->db->get();

    $result = $query->result_array();
    $query = $this->db->get('customer'); // Your code above if condition
    $result = $query->result_array(); // Get data in array Format using **result_array()**
        if ($result) {
          if ($query->num_rows() > 0) { // You have to change condition from **$result['password_change ']** To **$query->num_rows() > 0**
            if ($result - > id == $id) { // Also change here condition from **$result - > id** To $result['id']
              return array('true' => 1, 'customer_id' => $result['customer_id']); //Also change here from **$result - > customer_id** To $result['customer_id']
            } else {
              return false;
            }
          } else {
            if () // some condition
          {
            return $result; // Also Change here from **return (array) $result** To $result
          } else {
            return false;
          }
        }
        } else {
          return false;
        }