Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > генерация таблиц html средствам php


Автор: hobbs 21.12.2014, 23:47
Дан вот такой массив:
Код


Array
(
    [0] => Array
        (
            [name_channel] => Первый
            [image_channel] => images/logo_channels/P1-1.png
            [start_time] => 2014-12-26 07:00:00
            [name_telecast] => От праздника к празднику
        )

    [1] => Array
        (
            [name_channel] => Первый
            [image_channel] => images/logo_channels/P1-1.png
            [start_time] => 2014-12-26 08:00:00
            [name_telecast] => "V" значит Вендетта
        )

    [2] => Array
        (
            [name_channel] => Первый
            [image_channel] => images/logo_channels/P1-1.png
            [start_time] => 2014-12-26 09:00:00
            [name_telecast] => Без следа
        )

    [3] => Array
        (
            [name_channel] => Первый
            [image_channel] => images/logo_channels/P1-1.png
            [start_time] => 2014-12-26 10:00:00
            [name_telecast] => Фарго
        )

    [4] => Array
        (
            [name_channel] => Звезда
            [image_channel] => images/logo_channels/P1-5.png
            [start_time] => 2014-12-19 12:00:00
            [name_telecast] => Фарго
        )

)


Необходимо сгенерировать такие таблицы:
HTML
<table border="1">
   <tr>
      <td>logo</td>
      <td>name_channel</td>
   </tr>
   <tr>
      <td>start_time</td>
      <td>name_telecast</td>
   </tr>
   <tr>
      <td>start_time</td>
      <td>name_telecast</td>
   </tr>
   <tr>
      <td>start_time</td>
      <td>name_telecast</td>
   </tr>
</table>

Автор: Aliance 22.12.2014, 08:50
Код

<?php

$in = [
        [
            'name_channel' => 'Первый',
            'image_channel' => 'images/logo_channels/P1-1.png',
            'start_time' => '2014-12-26 07:00:00',
            'name_telecast' => 'От праздника к празднику',
        ],
        [
            'name_channel' => 'Первый',
            'image_channel' => 'images/logo_channels/P1-1.png',
            'start_time' => '2014-12-26 08:00:00',
            'name_telecast' => '"V" значит Вендетта',
        ],
        [
            'name_channel' => 'Первый',
            'image_channel' => 'images/logo_channels/P1-1.png',
            'start_time' => '2014-12-26 09:00:00',
            'name_telecast' => 'Без следа',
        ],
        [
            'name_channel' => 'Первый',
            'image_channel' => 'images/logo_channels/P1-1.png',
            'start_time' => '2014-12-26 10:00:00',
            'name_telecast' => 'Фарго',
        ],
        [
            'name_channel' => 'Звезда',
            'image_channel' => 'images/logo_channels/P1-5.png',
            'start_time' => '2014-12-19 12:00:000',
            'name_telecast' => 'Фарго',
        ],
];

$out = [];

foreach ($in as $channel) {
    if (!isset($out[$channel['name_channel']])) {
        $out[$channel['name_channel']] = [
            'image_channel' => $channel['image_channel'],
            'telecasts' => [],
        ];
    }

    $out[$channel['name_channel']]['telecasts'][] = [
        'name_telecast' => $channel['name_telecast'],
        'start_time' => $channel['start_time'],
    ];
}

var_dump($out);

Автор: whatisnot 29.12.2014, 20:02
Код

$tb = array();

array_walk($in, function($v) use(&$tb) {
    $v = (object)$v;
    if(!in_array($v->name_channel, $tb)) array_push($tb, $v->name_channel, $v->image_channel, $v->start_time, $v->name_telecast);
    else array_push($tb, $v->start_time, $v->name_telecast); 
});

$tb = '<table border=1>' . implode(array_map(function($v) {
    return '<tr><td>' .implode('</td><td>', $v) . '</td></tr>';
}, array_chunk($tb, 2))) . '</table>';

echo $tb;


PS. $v = (object)$v; - это ради того, чтобы не писать здесь скобки, кавычки по много раз.

В РНР 5.5.0 стала доступна удобная функция позволяющая выбрать необходмые колонки массива по индексу или ключу - http://php.net/manual/ru/function.array-column.phphttp://. В более ранних версиях можно использовать аналог:

Код

function arrayColumn($a, $i) {
    return array_values(array_diff(array_map(function($v) use($i) {
        return $v[$i];
    }, $a), array(null)));
}


Для задач типа вашей такая может пригодится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)