Многомерные массивы (вывод)

190
14 октября 2017, 20:17

Если не сложно, помогите разобраться с массивами и их выводами. Проблема в том, что простые массивы (ассоциативные или нет) - вывожу без проблем через foreach.

    $tasks = [
      'Делаю' => ['Личный блог','Изучаю PHP','Изучаю HTML',
      ],
      'Планирую' => ['Освоить Laravel','Освоить YII2'],
      'Завершенные задачи' => ['Основы HTML','Основы CSS','Основы MySql']
    ]
    <?php foreach ($tasks as $do => $value):?>
      <h2><?=$do?></h2>
      <?php foreach ($value as $name): ?>
        <?=$name;?>
      <?php endforeach; ?>
    <?php endforeach; ?>

Но, когда хочу вывести, к примеру, такой вид:

    $tasks = [
      'Делаю' => [
        'title' => 'Личный блог','Изучаю PHP','Изучаю HTML',
        'content' => 'Описание','Описание','Описание',
        'action' => TRUE,
      ],
      'Планирую' => [
        'title' => 'Освоить Laravel','Освоить YII2',
        'content' => 'Описание','Описание',
        'action' => TRUE,
      ],
      'Завершенные задачи' => [
        'title' => 'Основы HTML','Основы CSS','Основы MySql',
        'content' => 'Описание','Описание','Описание',
        'action' => FALSE,
      ]
    ]

Получается только так, что либо выводятся все строки: title , content, action либо появляется ошибка, когда пытаюсь указать какой-либо ключ. Если так пишу, то все строки выводятся:

    <?php foreach ($tasks as $do => $value):?>
      <h2><?=$do?></h2>
      <?php foreach ($value as $name): ?>
        <?=$name;?>
      <?php endforeach; ?>
    <?php endforeach; ?>

Если пытаюсь в переменной $name указать ключ, то ошибка: Warning: Illegal string offset 'title' in

    <?php foreach ($tasks as $do => $value):?>
  <h2><?=$do?></h2>
  <?php foreach ($value as $name): ?>
    <?=$name['title'];?>
  <?php endforeach; ?>
<?php endforeach; ?>

В итоге хочу получить следующий результат: Когда action = FALSE - задача зачеркнута и находится в списке завершенных задач. Когда action = TRUE - задача в списке "Планирую" или "Делаю".

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

Answer 1

Для этого можно использовать рекурсивную функцию.

$tasks = [
  'Делаю' => [
    'title' => 'Личный блог','Изучаю PHP','Изучаю HTML',
    'content' => 'Описание','Описание','Описание',
    'action' => TRUE,
  ],
  'Планирую' => [
    'title' => 'Освоить Laravel','Освоить YII2',
    'content' => 'Описание','Описание',
    'action' => TRUE,
  ],
  'Завершенные задачи' => [
    'title' => 'Основы HTML','Основы CSS','Основы MySql',
    'content' => 'Описание','Описание','Описание',
    'action' => FALSE,
  ]
];
function each_array($arr){
    foreach($arr as $key => $val){
        // к примеру 
        echo $key.'---';
        if(is_array($val)){
            each_array($val);
        }
        else{
            echo $val.'<br>';
        }
    }
}
each_array($tasks);
READ ALSO
Как удалить лишние звездочки из строки?

Как удалить лишние звездочки из строки?

Добрый день профиСкажите, как с помощью рег выражений, удалить в строке две подряд звездочки? (лучше, если их больше чем одна подряд)

237
Медленная загрузка файлов на сервер

Медленная загрузка файлов на сервер

Есть PHP форма отправки файлов на серверПри загрузке файлов на сервер с ПК, скорость загрузки нормальная и все файлы успешно загружаются

153
Mustache PHP подключение шаблонов

Mustache PHP подключение шаблонов

Как в mustache подгружать шаблоны из разных папок? Под каждую папку создавать объект Mustache_Engine?

138
как отсортировать из массива?

как отсортировать из массива?

Всем вечер добрыйНужен ваш совет профессионалы

133