2013-06-29 2 views
0

У меня возникли проблемы с тем, чтобы это работало, я уверен, что есть простое объяснение, но я не могу подключить точки на данный момент.Yii Framework: ошибка при использовании многомерного массива

Я использую Yii Framework 1.1.13 с помощью Bootstrap Twitter.

Мой контроллер выглядит следующим образом:

public function actionIndex() 
{ 
    $posts = array(
     'total' => 5, 
     'items' => array(
      array(  
       'id' => 1, 
       'header' => 'Praesent arcu nisi', 
       'body' => 'Lacinia a dolor at, tempus suscipit diam.Lacinia a dolor at, tempus suscipit diam.Lacinia a dolor at, tempus suscipit diam.Lacinia a dolor at, tempus suscipit diam.Lacinia a dolor at, tempus suscipit diam.', 
       'img' => '', 
       'link' => 'http://www.example.com', 
       'category' => 'Test', 
       'company' => 'Example', 
       'company_bkg' => '', 
       'rating' => 8, 
       'comments_total' => 2, 
       'comments_items' => array(
        array(
         'id' => 1, 
         'name' => 'Anonymous', 
         'timestamp' => date('d.m.Y H:i'), 
         'text' => 'Kommentar 1.', 
         'rating' => 145, 
        ), 
        array(
         'id' => 2, 
         'name' => 'Example', 
         'timestamp' => date('d.m.Y H:i'), 
         'text' => 'Kommentar 2.', 
         'rating' => -29, 
        ), 
       ), 
      ), 
      array(  
       'id' => 2, 
       'header' => 'Lacinia a dolor at', 
       'body' => 'Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi.', 
       'img' => '', 
       'link' => 'http://www.example.com', 
       'category' => 'Test', 
       'company' => 'Example', 
       'company_bkg' => '', 
       'rating' => 0, 
       'comments_total' => 0, 
       'comments_items' => array(
        array(

        ), 
       ), 
      ), 
      array(  
       'id' => 3, 
       'header' => 'Lacinia a dolor at', 
       'body' => 'Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi.', 
       'img' => '', 
       'link' => 'http://www.example.com', 
       'category' => 'Test', 
       'company' => 'Example', 
       'company_bkg' => '', 
       'rating' => -8, 
       'comments_total' => 1, 
       'comments_items' => array(
        array(
         'id' => 1, 
         'name' => 'Anonymous', 
         'timestamp' => date('d.m.Y H:i'), 
         'text' => 'Kommentar 1.', 
         'rating' => 9, 
        ), 
       ), 
      ), 
     ), 
    ); 

    $this->render('index',array('posts'=>$posts)); 
} 

И вид выглядит следующим образом:

/* @var $this SiteController */ 
/* @var $posts array */ 
/* @var $comment array */ 

... 
foreach($posts['items'] as $post) { 
... 
    for($i = 0; $i < $length; $i++) { 
     $comment = $post['comments_items'][$i]; 
     var_dump($comment); 

... 

Который показывает следующее var_dump:

array (size=5) 
    'id' => int 1 
    'name' => string 'Anonymous' (length=9) 
    'timestamp' => string '29.06.2013 15:57' (length=16) 
    'text' => string 'Kommentar 1.' (length=12) 
    'rating' => int 145 

Но когда я делаю $comment['rating'] , он возвращается с ошибкой:

Undefined index: rating 

Кто-нибудь знает, что я делаю неправильно?

ответ

1

Вы указываете второй массив так:

 array(  
      'id' => 2, 
      'header' => 'Lacinia a dolor at', 
      'body' => 'Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi.', 
      'img' => '', 
      'link' => 'http://www.example.com', 
      'category' => 'Test', 
      'company' => 'Example', 
      'company_bkg' => '', 
      'rating' => 0, 
      'comments_total' => 0, 
      'comments_items' => array(
       array(

       ), 
      ), 
     ), 

Там нет rating входа в comments_items, поэтому вы получаете сообщение об ошибке.

Попробуйте добавить rating элемент тоже:

 array(  
      'id' => 2, 
      'header' => 'Lacinia a dolor at', 
      'body' => 'Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi. Praesent arcu nisi.', 
      'img' => '', 
      'link' => 'http://www.example.com', 
      'category' => 'Test', 
      'company' => 'Example', 
      'company_bkg' => '', 
      'rating' => 0, 
      'comments_total' => 0, 
      'comments_items' => array(
       array(
        'rating' => 1 
       ), 
      ), 
     ), 
2

Имя вашей переменной - $ posts, а не $ post.

Посмотрите имя в этой строке:

$this->render('index',array('posts'=>$posts)); 
+0

Спасибо за попытку, но это потому, что я забыл добавить строку кода в виду, показанному здесь. 'foreach ($ posts ['items'] as $ post) {' был отредактирован в примере кода выше. – rnngau

+0

Можно ли предположить, что переменная $ length внутри stament является ключевым словом comments_total? – user1648170

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