2012-01-16 2 views
0
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-> результат(), как этотпреобразовать строку в объект в PHP (CodeIgniter)

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

Я получаю ошибку, начиная «Объект класса не может быть преобразован в строку» Мой вопрос:

  1. есть возможность преобразовать массив строк в объект?

  2. И как сделать $ row -> $ this-> tbl_fields [0], так что мне не всегда нужно писать имя поля.

ответ

0

Это основной порядок выдачи операций. PHP не знает, хотите ли вы какое-то динамическое свойство $this строки или свойство $this->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] всегда будет идентификатором, а [1] всегда будет именем (в этом случае вы может также установить статический префикс для co lumn names и использовать это вместо массива $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); 
     } 
    } 
} 
+0

Спасибо большое. Я получил это сейчас. – comenk

-1

Вы должны использовать поиск, прежде чем спрашивать

@jlb

Вы можете создать стандартный переменный класс (основной объект):

$object = new stdClass(); 

и цикл через массив и повторно назначить значения

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

И поиск Google: http://www.richardcastera.com/blog/php-convert-array-to-object-with-stdclass

+0

Кто-то на самом деле не читал этот вопрос ...^_^ – landons

+0

спасибо w0rldart за ваше предложение, но это не решить мою проблему .. – comenk

+0

Лол вы спросили: Есть возможность конвертировать строка массива для объекта? И я опубликовал, как – Alex

Смежные вопросы