Задать вопрос
@djok2142

Как построить таблицу из двумерного массива, где каждый вложенный массив это столбец?

Здравствуйте.
Есть двумерный массив
$array = array(
	'Фрукты' => array('Яблоки', 'Апельсины', 'Груши'),
	'Овощи' => array('Свекла', 'Морковь', 'Картофель', 'Капуста', 'Перец'),
	'Крупы' => array('Гречиха', 'Рис', 'Овсянка', 'Фасоль'),
	'Ягоды' => array('Виноград', 'Смородина')
);

Скажите пожалуйста как из него построить такую html таблицу
5c63e78cac448013439564.jpeg
То есть каждый вложенный массив это столбец таблицы. Количество элементов в массиве и во вложенных может быть разное.
Если бы вложенный масcив должен был быть строкой таблицы, то тут все элементарно, но нада сделать их столбцами, никак не соображу как это сделать.
  • Вопрос задан
  • 932 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Поскольку в современном РНР никто не пишет такую кашу из HTML и PHP, как в ответе 0xD34F, то сначала следует преобразовать массив к горизонтальному. Это можно сделать как угодно, я предпочитаю теплые ламповые циклы.
$max = 0;
foreach ($array as $title => $item) {
    $max = max($max, count($item));
}
$rows = [];
for($i = 0; $i < $max; $i++) {
    foreach ($array as $item) {
        $rows[$i][] = $item[$i] ?? '';
    }
};
$titles = array_keys($array);

И затем уже выводить $titles и $rows обычным циклом, используя любимый шаблонизатор.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F
$header = "<tr>".implode("", array_map(function($n) {
  return "<th>$n</th>";
}, array_keys($array)))."</tr>";

$rowsCount = max(array_map(function($n) {
  return count($n);
}, $array));

$rows = implode("", array_map(function($i) use($array) {
  foreach ($array as $item) {
    $row[]= "<td>".(isset($item[$i]) ? $item[$i] : "")."</td>";
  }
  return "<tr>".implode("", $row)."</tr>";
}, range(0, $rowsCount - 1)));


echo "<table>$header$rows</table>";
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы