PHP цикл через многомерный массив - PullRequest
0 голосов
/ 06 января 2010

В настоящее время я работаю над сайтом, который построен на codeigniter, в настоящее время я запрашиваю данные, и думаю, что возможно было бы 3 массива, которые могли бы быть возвращены в виде массива, каждый с различным количеством результатов, мой вопрос Я не могу всю жизнь обходить массив, который у меня есть на данный момент,

моя модель выглядит так

public function get_special_backgrounds() {
    $this->db->select('*');
    $this->db->from('background');
    $this->db->where('is_special', 1);

    $query = $this->db->get();
    return $query->result_array();
}

мой контроллер

enter public function index() {
//  $this->output->enable_profiler(TRUE);
    $data = array();
    if($query = $this->category_model->get_all_online()) {
        $data['main_menu'] = $query;
    }
    $this->load->model('image_model');
    /*
    * Sort out the users backgrounds, basically do a check to see if there is a 'special' background
    * if there is not a 'special' background then IF the user is logged in and has a background of there
    * own show that one, if not show a generic one, if they are not logged in show a generic one
    */
    $image = array();
    if ($query = $this->image_model->get_special_backgrounds()) {
        $image = $query;
    }

    $data = array_merge($data, $image);
    die(print_r($data));
    $this->load->view('home/main_page.php', $data);
}

массив, который возвращает return, выглядит так,

Array
(
    [main_menu] => CI_DB_mysql_result Object
        (
            [conn_id] => Resource id #28
            [result_id] => Resource id #35
            [result_array] => Array
                (
                )

            [result_object] => Array
                (
                )

            [current_row] => 0
            [num_rows] => 1
            [row_data] => 
        )

    [special] => Array
        (
            [0] => Array
                (
                    [background_id] => 6
                    [background_name] => Master-Backgrounds.png
                    [background_path] => /Users/Simon/Sites/mysite/media/uploads/backgrounds/
                    [is_special] => 1
                    [background_date_uploaded] => 1262687809
                    [users_user_id] => 1
                    [users_user_group_group_id] => 1
                )

            [1] => Array
                (
                    [background_id] => 11
                    [background_name] => Master-mysite-Template.png
                    [background_path] => /Users/Simon/Sites/mysite/media/uploads/backgrounds/
                    [is_special] => 1
                    [background_date_uploaded] => 1262795313
                    [users_user_id] => 5
                    [users_user_group_group_id] => 2
                )

        )

)
1

Ответы [ 4 ]

3 голосов
/ 24 ноября 2010

Это объект, поэтому вы не можете перебирать его как массив. Я понимаю, что вы пытаетесь сделать, и понимаю, почему это кажется разумным, но чтобы понять, о чем я говорю, попробуйте следующее:

Изменить это:

public function get_special_backgrounds() {
    $this->db->select('*');
    $this->db->from('background');
    $this->db->where('is_special', 1);

    $query = $this->db->get();
    return $query->result_array();
}

К этому:

public function get_special_backgrounds() {
    $this->db->select('*');
    $this->db->from('background');
    $this->db->where('is_special', 1);

    $query = $this->db->get();
    return $query;
}

И

Изменить это:

$image = array();
if ($query = $this->image_model->get_special_backgrounds()) {
    $image = $query;
}

К этому:

<code>   if($images = $this->image_model->get_special_backgrounds()) {
       foreach($images->result_array() as $image) {
          echo "<pre>";
          print_r($image);
          echo "
"; } }
2 голосов
/ 06 января 2010

Вам нужно зациклить часть special массива?

foreach ( $data['special'] as $row ) {
    // do stuff with the $row array
}
1 голос
/ 06 января 2010

Попробуйте foreach

$arr = (your array);

foreach ($arr as $key => $insideArrays) {
 foreach ($insideArrays as $k2 => $insideInsideArrays){
  ..........
 }

}
0 голосов
/ 06 января 2010

Выглядит как массив результатов с нечетным элементом в начале. Я бы избавился от первого элемента, а затем просто перебрал его:

array_shift($data);
foreach ($data as $row) {
  // Do stuff with $row
  var_dump($row);
}
...