Более эффективный доступ к многомерному массиву

0

Я пытаюсь красиво вывести массив данных (с Kohana v2.3.4), и я думаю, что для этого должен быть более эффективный и элегантный способ. Мой массив выглядит так:

array('category_id' => value, 'category_title' => value, 'posts' => array( 'id' => value, 'title' => value, ... ))

И вот, как я выводил его в моем представлении (некоторые значения массива опущены из этого примера для простоты):

foreach($data as $d) {
    echo '<h3>'.$d['category_title'].'</h3>';
    foreach($d['posts'][0] as $p) {
        echo '<p>'.$p['title'].$p['id'].'</p>';
    }
}

Есть ли лучший способ обойти это с массивом, который у меня есть?

  • 0
    я считаю, что это должно быть 'posts' => array(array('id'=>..), array('id'=>..), ..) ..
Теги:
arrays
kohana

2 ответа

1
Лучший ответ

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

foreach($data as $d) {
    echo "<h3>{$d['category_title']}</h3>";
    foreach($d_posts[0] as $p) {
        echo "<p>{$p['title']} {$p['id']}</p>";
    }
}

Вы также можете комбинировать его с extract() для более чистых строк:

foreach($data as $d) {
    extract($d, EXTR_PREFIX_ALL, 'd_');
    echo "<h3>$d_category_title</h3>";
    foreach($d_posts[0] as $p) {
        extract($p, EXTR_PREFIX_ALL, 'p_');
        echo "<p>$p_title $p_id</p>";
    }
}
  • 0
    Спасибо, Лукман. Я использовал extract (), но никогда с EXTR_PREFIX_ALL - хорошее предложение.
1

Помимо незначительной ошибки:

foreach ($data as $d) {
  echo '<h3>'.$d['category_title'].'</h3>';
  foreach($d['posts'] as $p) {
    echo '<p>'.$p['title'].$p['id'].'</p>';
  }
}

нет, нет.

Какова ваша проблема с вложенным циклом для этого?

  • 0
    $ d ['posts'] [0] не было ошибкой - без [0] второй foreach не имеет доступа к нужным мне переменным. У меня нет проблем с вложенными циклами как таковыми, это просто грязный способ сделать это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню