Как получить доступ к массиву объектов stdClass в codeigniter

У меня следующие print_r ($rolePermissions); массив и интересно, как я могу получить доступ только к permID динамически.

Array ( [0] => Array ( [0] => stdClass Object ( [roleID] => 1 [permID] => 1 ) [1] => stdClass Object ( [roleID] => 1 [permID] => 2 ) [2] => stdClass Object ( [roleID] => 1 [permID] => 3 ) [3] => stdClass Object ( [roleID] => 1 [permID] => 4 ) [4] => stdClass Object ( [roleID] => 1 [permID] => 5 ) [5] => stdClass Object ( [roleID] => 1 [permID] => 6 ) [6] => stdClass Object ( [roleID] => 1 [permID] => 7 ) [7] => stdClass Object ( [roleID] => 1 [permID] => 8 ) [8] => stdClass Object ( [roleID] => 1 [permID] => 9 ) [9] => stdClass Object ( [roleID] => 1 [permID] => 10 ) [10] => stdClass Object ( [roleID] => 1 [permID] => 11 ) [11] => stdClass Object ( [roleID] => 1 [permID] => 12 ) [12] => stdClass Object ( [roleID] => 1 [permID] => 13 ) [13] => stdClass Object ( [roleID] => 1 [permID] => 14 ) [14] => stdClass Object ( [roleID] => 1 [permID] => 15 ) [15] => stdClass Object ( [roleID] => 1 [permID] => 16 ) [16] => stdClass Object ( [roleID] => 1 [permID] => 17 ) [17] => stdClass Object ( [roleID] => 1 [permID] => 18 ) [18] => stdClass Object ( [roleID] => 1 [permID] => 19 ) [19] => stdClass Object ( [roleID] => 1 [permID] => 20 ) [20] => stdClass Object ( [roleID] => 1 [permID] => 21 ) [21] => stdClass Object ( [roleID] => 1 [permID] => 22 ) [22] => stdClass Object ( [roleID] => 1 [permID] => 23 ) [23] => stdClass Object ( [roleID] => 1 [permID] => 24 ) ) [1] => Array ( [0] => stdClass Object ( [roleID] => 2 [permID] => 2 ) [1] => stdClass Object ( [roleID] => 2 [permID] => 3 ) [2] => stdClass Object ( [roleID] => 2 [permID] => 4 ) ) [2] => Array ( [0] => stdClass Object ( [roleID] => 3 [permID] => 4 ) ) [3] => Array ( ) )

Я имею доступ со следующим кодом:

$rolePermission[0]->permID

Но я не могу получить все записи, потому что результаты могут меняться каждый раз, а индекс 0 - это невозможный способ сделать это. Он отображает некоторые записи и всплывает ошибки в других.

Error messages:
Undefined offset: 0
Message: Trying to get property of non-object

любая помощь?

3 ответа

Либо цикл по массиву:

$ids = array();
foreach($rolePermission as $permissionObject){
 $ids[] = $permissionObject->permID;
}

Или убедитесь, что ключ существует до доступа к нему:

if(isset($rolePermission[0])) {
 $id = $rolePermission[0]->permID;
}


Примечание. Когда вы используете print_r() он выведет массив с stdClass Object в CI, когда вы вытаскиваете значение из базы данных.

Существует решение для отображения массива без использования stdClass Object при итерации.

Пример: рассмотрим $final рассмотрим массив, и при использовании print_r() он отображает stdClass Object.

  • Вы должны использовать цикл следующим образом, чтобы он избегал stdClass Object при его печати.

Код:

Этот код можно использовать для получения значений из БД с помощью контроллера и модели.

Если одна строка вывода извлекается из БД

<!--?php
foreach($final--->result() as $single)
{
 //You can print the variable values over here as follows (E.g) echo $single->id 
}
?>

Если из базы данных извлекается несколько строк вывода

<!--?php
$row=array();
foreach($final--->result() as $single)
{
 //You can store it as an array here if you are going on with multiple loops
 $row[] = $single; 
}
print_r($row); // here you can save it as an another array
?>

Как должен выглядеть код модели, если вы используете '-> result()' в foreach, чтобы получить значения

Вот образец, который должна выглядеть ваша модель, если вы используете вышеуказанные методы для извлечения вывода.

employee_model.php

<!--?php
class Employee_model extends CI_Model{
function __construct() {
parent::__construct();
}

public function getEmployees()
{
 $this--->db->select('*');
 $this->db->from('employee');
 $this->db->where('delete_status','0');
 $this->db->where('status','1');
 $this->db->order_by('id','DESC');
 $query = $this->db->get();
 return $query;
}
?>

Как вызвать модель с контроллера

<!--?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends Layout_Controller {

public function __construct(){
 parent::__construct();
 $this--->load->library("pagination");
 $this->load->model('employee_model');
 $this->load->model('ajax_model'); 
 }

 public function employee_listing()
 {
 $result['all_employee'] = $this->employee_model->getEmployees(); // getEmployees is the function name in the employee_model
 $this->load->view('frontend/employee_list',$result);
 }


в модели напишите этот код. последняя строка получит значение только для столбца expire и перейдет к контроллеру. то вы можете получить доступ к форме просмотра формы

function album_expire($user_id ,$album_iid)
{
 $this->db->select('expire');
 $this->db->from('mw_album');
 $this->db->where('user_id', $user_id); 
 $this->db->where('id', $album_iid); 
 return $this->db->get()->row()->expire;
}

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

$data['album_expire'] = $this->albums_model->album_expire($user_id ,$album_iid);

в виду доступа к нему, как это

licensed under cc by-sa 3.0 with attribution.