在Codeigniter中访问多维stdClass数组

时间:2014-07-24 19:53:12

标签: php arrays codeigniter multidimensional-array

我想我有一个特例。我认为我的数组格式化,以至于访问stdClass的传统方法不起作用。

在有人叮嘱我没有查看关于这个主题的帖子(有很多)之前。我想发帖说我已经检查了几乎每个人,这里有几个链接来证明它。

我已经读过它们了。我已经尝试了访问数据的所有建议。他们都没有一天工作。

我的数据格式化为:

 Children::__set_state(array(
  'id' => NULL,
  'code' => NULL,
  'accld' => NULL,
  'fname' => NULL,
  'mname' => NULL,
  'lname' => NULL,
  'gender' => NULL,
  'dob' => NULL,
  'class' => NULL,
  'status' => NULL,
  'photo' => NULL,
  'allergies' => NULL,

'0' => 
  stdClass::__set_state(array(
 'id' => '1039',
 'code' => '2383',
 'accId' => '32',
 'fname' => 'Loren',
 'mname' => 'M',
 'lname' => 'Cings',
 'gender' => '2',
 'dob' => '2005-10',
 'class' => '1',
 'status' => '1',
 'photo' => ',
 'allergies' => '',
                     )),

'1' => 
  stdClass::__set_state(array(
 'id' => '1044',
 'code' => '6266',
 'accId' => '32',
 'fname' => 'Justin',
 'mname' => 'R',
 'lname' => 'Cings',
 'gender' => '1',
 'dob' => '2001-11',
 'class' => '15',
 'status' => '11',
 'photo' => ,
 'allergies' => '',
                     )),

我个人的想法是我的数据需要格式化为

    [0] => 
    stdClass::__set_state(array(  .....

因为当我查看所有其他发布的数组时。数组编号用括号和单引号括起来。

在我的模型代码中,这就是生成数组的原因:

   public function populate($row) {
    foreach ($row as $key => $value) {
        $this->$key = $value;
     }
  }

在这个理论中唯一可以解决漏洞的是因为我有另一个由同一个函数生成的数组,它可以用$ myarray->值来评估它的值。

感谢您的关注和想法。

答案

我找到了这个谜语的答案。 我不得不回去改变我的模型代码。

由此:

public function accld($id) {

    $query = $this->db->get_where($this::DB_TABLE, array('accId' => $id));
    $result = $this->populate($query->result());
    return $result;

}

到此:

public function accld($id) {

    $query = $this->db->get_where($this::DB_TABLE, array('accId' => $id));

    $result = $this->populate($query->result('array'));
    return $result;

}

添加'array'参数转换了从

返回的数据

您在上面看到的内容

Children::__set_state(array(
 'id' => NULL,
 'code' => NULL,
 'accld' => NULL,
 'fname' => NULL,
 'mname' => NULL,
 'lname' => NULL,
 'gender' => NULL,
 'dob' => NULL,
 'class' => NULL,
 'status' => NULL,
 'photo' => NULL,
 'allergies' => NULL,
'0' => 
  array (
         'id' => '1161',
         'code' => '1784',
         'accId' => '124',
         'fname' => 'Diane',
         'mname' => '',
         'lname' => 'Gre',
         'gender' => '1',
         'dob' => '2012-6',
         'class' => '18',
         'status' => '7',
         'photo' => 
      ));

然后我可以用

迭代它
   foreach($children as $key => $val){ if(!empty($val)){

1 个答案:

答案 0 :(得分:1)

虽然你想出了如何让它发挥作用,但我不确定你是否理解为什么。 Codeigniter返回一个对象数组,除非您指定它以返回一个数组。

例如,如果您收到类似

的数组
$result = array(array('id'=>1,'name'=>'Steve','age'=>22) );

使用'array'参数,没有它,标准代码点火器返回可以使用默认格式的对象表示法访问 - 例如 - 您将在第一个结果行中访问该名称

$name = $result[0]->name;

我希望这有意义,并为你清理一下。