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

StackOverflow https://stackoverflow.com/questions/1898854

  •  19-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь красиво вывести массив данных (с помощью 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>';
    }
}

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

Это было полезно?

Решение

Вы не можете избежать использования вложенного цикла (если только вы не используете 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>";
    }
}

Другие советы

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

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

нет, это не так.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top