【问题标题】:convert a string to object in PHP (CodeIgniter)在 PHP (CodeIgniter) 中将字符串转换为对象
【发布时间】:2012-01-16 23:17:03
【问题描述】:
Class Account extends CI_Model {
    private $tbl_rest   = array();
    private $tbl_fields = array('bs_id', 'bs_name', 'bs_type', 'bs_sub');

    function get_data($dataid){
        $this->db->select( '*' );
        $this->db->from( $this->tbl_name );
        $this->db->where( $this->tbl_key, $id );

        $query  = $this->db->get(); 
        if( $query->num_rows() > 0 ) 
        {
            foreach ($query->result() as $row)
            {
                $this->tbl_rest[] .= '<li id="'.$row->bs_id.'">'.$row->bs_name.'</li>';
            }

            echo( json_encode( array( 'tdata' => $this->tbl_rest ) ) );
        } else {
            echo( false );
        }
    }
}

当我像这样更改 $query->result() 时

'<li id="'.$row->$this->tbl_fields[0].'">'.$row->$this->tbl_fields[1].'</li>';

我开始收到错误“类的对象无法转换为字符串” 我的问题是:

  1. 可以将数组字符串转换为对象吗?

  2. 以及如何使$row->$this->tbl_fields[0]发生,所以我不必总是写字段的名称。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    这是一个基本的操作顺序问题。 PHP 不知道你是想要行的一些动态的$this 属性,还是行的$this-&gt;tbl_fields[0] 属性。

    试试这个:

    <?php
     $this->tbl_rest[] .= '<li id="'.$row->{$this->tbl_fields[0]}.'">'.$row->{$this->tbl_fields[1]}.'</li>';
    

    此外,我建议将模型的 $tbl_fields 属性定义为静态或常量,因为它在运行时或对于类的特定实例不会改变:

    <?php
    Class Account extends CI_Model {
        private static $tbl_fields = array('bs_id', 'bs_name', 'bs_type', 'bs_sub');
        // ...
    
        $this->tbl_rest[] .= '<li id="'.$row->{self::$tbl_fields[0]}.'">'.$row->{self::$tbl_fields[1]}.'</li>';
    
        // ...
    }
    

    此外,对特定列名的硬编码数组引用会适得其反,除非您知道 [0] 将始终是 ID,而 [1] 将始终是名称(在这种情况下,您可以为列名设置一个静态前缀并使用它而不是$tbl_fields 数组)。

    更好的是,因为您在这里所做的只是一个键/值对(我假设您想将此模式重新用于其他 API 方法...),您可以简单地选择您想要的字段使用它们。以下是我的建议:

    <?php
    Class Account extends CI_Model {
        private $tbl_rest   = array();
        private static $col_prefix = 'bs_';
    
        function get_data($dataid){
            $this->db->select(array(
                self::$col_prefix.'id AS key',
                self::$col_prefix.'name AS value'
            ));
            $this->db->from( $this->tbl_name );
            $this->db->where( $this->tbl_key, $id );
    
            $query  = $this->db->get(); 
            if( $query->num_rows() > 0 ) 
            {
                foreach ($query->result() as $row)
                {
                    $this->tbl_rest[] .= '<li id="'.$row->key.'">'.$row->value.'</li>';
                }
    
                echo( json_encode( array( 'tdata' => $this->tbl_rest ) ) );
            } else {
                echo( false );
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      你应该在询问之前使用搜索

      @jlb

      您可以创建一个标准的类变量(非常基本的对象):

      $object = new stdClass();
      

      遍历你的数组并重新赋值

      foreach ($array as $key => $value)
      {
          $object->$key = $value;
      }
      

      然后搜索谷歌: http://www.richardcastera.com/blog/php-convert-array-to-object-with-stdclass

      【讨论】:

      • 大声笑你问:可以将数组字符串转换为对象吗?我已经发布了如何
      猜你喜欢
      • 2010-11-04
      • 1970-01-01
      • 2021-02-21
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多