【问题标题】:converting array to stdClass in CodeIgniter在 CodeIgniter 中将数组转换为 stdClass
【发布时间】:2013-11-21 23:17:27
【问题描述】:

我使用下面的函数从 CodeIgniter 中的两个表返回数据

public function test()
{
    $this->db->select('*');
    $this->db->from('WHOUSE1.DLY_BWR_DLY_PERFORMANCE');
    $this->db->join('WHOUSE1.DATE_DIM', 'WHOUSE1.DATE_DIM.DATE_KEY = WHOUSE1.DLY_BWR_DLY_PERFORMANCE.BDP_DATE');
    $query = $this->db->get();
    return $query->result_array();
}

使用 var_dump 我得到以下结果

array (size=3226)
0 => 
array (size=121)
  'BDP_ID' => string '945149' (length=6)
  'BDP_COST_CENTRE_NUMBER' => string '1376' (length=4)
  'BDP_DATE' => string '20040807' (length=8)
  'BDP_DAY_CODE' => string '6' (length=1)
  'BDP_TAKE' => string '4923.78' (length=7)
  'BDP_PAYOUT' => string '3779.22' (length=7)
  'BDP_ACTUAL_SLIPPAGE' => string '636' (length=3)

1 => 
array (size=121)
  'BDP_ID' => string '945150' (length=6)
  'BDP_COST_CENTRE_NUMBER' => string '1376' (length=4)
  'BDP_DATE' => string '20040809' (length=8)
  'BDP_DAY_CODE' => string '1' (length=1)
  'BDP_TAKE' => string '2848.3' (length=6)
  'BDP_PAYOUT' => string '4190.34' (length=7)
  'BDP_ACTUAL_SLIPPAGE' => string '280' (length=3)

但我想得到的是这个

  array (size=3226)
  0 => 
  object(stdClass)[27]
  'BDP_ID' => string '945149' (length=6)
  'BDP_COST_CENTRE_NUMBER' => string '1376' (length=4)
  'BDP_DATE' => string '20040807' (length=8)
  'BDP_DAY_CODE' => string '6' (length=1)
  'BDP_TAKE' => string '4923.78' (length=7)
  'BDP_PAYOUT' => string '3779.22' (length=7)
  'BDP_ACTUAL_SLIPPAGE' => string '636' (length=3)

  1 => 
  object(stdClass)[29]
  'BDP_ID' => string '945150' (length=6)
  'BDP_COST_CENTRE_NUMBER' => string '1376' (length=4)
  'BDP_DATE' => string '20040809' (length=8)
  'BDP_DAY_CODE' => string '1' (length=1)
  'BDP_TAKE' => string '2848.3' (length=6)
  'BDP_PAYOUT' => string '4190.34' (length=7)
  'BDP_ACTUAL_SLIPPAGE' => string '280' (length=3)

我似乎无法将数组转换为对象(stdClass)任何帮助将不胜感激,因为它是 CodeIgniter 的新手。

【问题讨论】:

标签: php codeigniter


【解决方案1】:

数组到stdClass可以通过这种方式在php中完成。

stdClass:: __set_state(array());

或者更好的方式。

$a = (object) array();

【讨论】:

    【解决方案2】:

    在您的模型中使用此代码(更改您的表名并选择不同的文件)

            $this->db->select('DISTINCT(subcategory)');
            $this->db->from('tbl_property');  
            $this->db->where('status','1');                          
            $data           = $this->db->get()->result(); 
            $sub_id         = array();
            foreach ($data as $row)
            {
                array_push($sub_id,$row->subcategory);
            }
            $this->db->from('tbl_subcategory');  
            $this->db->where_in('id',$sub_id);                          
            $data1          = $this->db->get()->result();
            return $data1;
    

    【讨论】:

      【解决方案3】:

      使用

      return $query->result();
      

      此函数以对象数组的形式返回查询结果,失败时返回空数组。通常,您会在 foreach 循环中使用它,如下所示:

      $query = $this->db->query("YOUR QUERY");
      
      foreach ($query->result() as $row)
      {
         echo $row->title;
         echo $row->name;
         echo $row->body;
      }
      

      编辑:

      如果您只想打印,可以使用var_dump()print_r()

      var_dump($obj);
      print_r($obj);
      

      如果您想要一个包含所有属性及其值的数组,请使用 get_object_vars()

      $properties = get_object_vars($obj);
      print_r($properties);
      

      【讨论】:

      • 当我使用$query->result()时函数失败;还有什么我可以做的吗?谢谢。
      • 我得到一个空白屏幕,即使我的 Apache 环境设置为显示所有错误,也没有显示错误。
      【解决方案4】:

      根据 Codeigniter I 的相同文档详细说明:

      result_array()
      
      This function returns the query result as a pure array, or an empty array when no 
      result `is produced. Typically you'll use this in a foreach loop, like this:`
      

      和..

      result()
      
      This function returns the query result as an array of objects, or an empty array 
      on failure.
      

      你应该以这种方式返回你的数据

      return $query->result();
      

      【讨论】:

      • 嗨,约翰,我的函数使用 $query->result() 失败;有没有办法重写函数 test() 以免失败。我只使用 result_array();提取数据,以便我可以解释我想做什么
      • 看,公共函数 test() { $this->db->join('WHOUSE1.DATE_DIM', 'WHOUSE1.DATE_DIM.DATE_KEY = WHOUSE1.DLY_BWR_DLY_PERFORMANCE.BDP_DATE');返回 $this->db->get('WHOUSE1.DLY_BWR_DLY_PERFORMANCE')->result(); }
      • 嗯,还是一样。但是无法理解为什么在你连帮助都帮不上的时候投票给我。没有冒犯的意思。
      • 因为,答案来自codeigniter手册,虽然我没有对你的问题投反对票:(
      猜你喜欢
      • 2016-12-25
      • 2013-10-29
      • 2020-03-20
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多