Построить таблицу с размахом строк, используя многомерный массив - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу, чтобы студенты и события недели отображались в формате календаря. У меня есть этот массив следующим образом.У каждого студента есть 7 массивов, начиная с понедельника по воскресенье, и во внутреннем массиве каждого есть события для дня

$array = [
    'Alex' => [
        [
            ['event' => 'eventName1'],['event' => 'eventName2']
        ],
        [
            ['event' => 'eventName3'],['event' => 'eventName4']
        ],
        [
            ['event' => 'eventName5'],['event' => 'eventName6']
        ],
        [
            ['event' => 'eventName7'],['event' => 'eventName8']
        ],
        [],
        [],
        []

    ], 
    'Allen' => [
        [
            ['event' => 'eventName'],['event' => 'eventName']   
        ],[
            ['event' => 'eventName'],['event' => 'eventName']  
        ],
        [],
        [],
        [],
        [],
        []
    ],
];

Мне нужно, чтобы массив отображался в виде календаря недели, я не знаю, где он ошибся с помощью следующего кода

<table>
    <thead>
        <tr>
            <th>Participant</th>
            <th>Monday</th>
            <th>Tuesday</th>
            <th>Wednesday</th>
            <th>Thrusday</th>
            <th>Friday</th>
            <th>Satday</th>
            <th>Sunday</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($array as $participant => $event): ?>
        <?php foreach ($event as $i => $value):?>
        <tr>
            <?php if ($i === 0): ?>
            <td rowspan="2"><?= $participant ?></td>
            <?php endif ?>
            <?php foreach ($value as $index  => $eventD):?>

            <td><?php echo $eventD['event']; ?></td>

        </tr>
        <?php endforeach ?>
        <?php endforeach ?>
        <?php endforeach ?>
    </tbody>
</table>

Моя проблема в цикле и в том, как распечатать события определенного дня.Может кто-нибудь, пожалуйста, в построении правильного формата.спасибо за помощь

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018
<?php

$array = [
    'Alex' => [
        [
            ['event' => 'eventName1'],['event' => 'eventName2']
        ],
        [
            ['event' => 'eventName3'],['event' => 'eventName4']
        ],
        [
            ['event' => 'eventName5'],['event' => 'eventName6']
        ],
        [
            ['event' => 'eventName7'],['event' => 'eventName8']
        ],
        [],
        [],
        []
    ], 
    'Allen' => [
        [
            ['event' => 'eventName'],['event' => 'eventName'],['event' => 'eventName'],['event' => 'eventName'],   
        ],[
            ['event' => 'eventName'],['event' => 'eventName']  
        ],
        [],
        [],
        [],
        [],
        []
    ],
];

$maxRows = [];
foreach ($array as $participant => $weekEvents) {
    $max = 0;
    foreach ($weekEvents as $dayEvents) {
        if (count($dayEvents) > $max) {
            $max = count($dayEvents);
        }
    }

    $maxRows[$participant] = $max;
}

?>

<table border="1">
    <thead>
        <tr>
            <th>Participant</th>
            <th>Monday</th>
            <th>Tuesday</th>
            <th>Wednesday</th>
            <th>Thrusday</th>
            <th>Friday</th>
            <th>Satday</th>
            <th>Sunday</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($array as $participant => $weeklyEvents): ?>
            <?php for ($i = 0; $i < $maxRows[$participant]; $i++): ?>
                <tr>
                    <?php if ($i === 0): ?>
                        <td rowspan="<?php echo $maxRows[$participant]; ?>">
                            <?php echo $participant; ?>
                        </td>
                    <?php endif; ?>

                    <?php for ($j = 0; $j < 7; $j++): ?>
                        <td>
                            <?php $dayEvents = $weeklyEvents[$j]; ?>

                            <?php if (isset($dayEvents[$i])): ?>
                                <?php echo $dayEvents[$i]['event']; ?>
                            <?php else: ?>
                                &nbsp;
                            <?php endif; ?>
                        </td>
                    <?php endfor; ?>
                </tr>
            <?php endfor; ?>
        <?php endforeach; ?>
    </tbody>
</table>
0 голосов
/ 21 декабря 2018

Попробуй так, если мое понимание верно

<?php

  $array = [
'Alex' => [
    [
        ['event' => 'eventName1'],['event' => 'eventName2']
    ],
    [
        ['event' => 'eventName3'],['event' => 'eventName4']
    ],
    [
        ['event' => 'eventName5'],['event' => 'eventName6']
    ],
    [
        ['event' => 'eventName7'],['event' => 'eventName8']
    ],
    [],
    [],
    []

 ], 
'Allen' => [
    [
        ['event' => 'eventName'],['event' => 'eventName']   
    ],[
        ['event' => 'eventName'],['event' => 'eventName']  
    ],
    [],
    [],
    [],
    [],
    []
   ],
];

    echo "<table border='1'>
 <thead>
    <tr>
        <th>Participant</th>
        <th>Monday</th>
        <th>Tuesday</th>
        <th>Wednesday</th>
        <th>Thrusday</th>
        <th>Friday</th>
        <th>Satday</th>
        <th>Sunday</th>
    </tr>
</thead>
<tbody>";
     foreach($array as $key => $data)
      {
    echo "<tr>
    <td>$key</td>";
    foreach($data as $data2) {
        if(is_array($data2) && isset($data2[0])) {
            echo "<td>";
             array_walk($data2, function($val, &$dat){
                echo $val['event'].', ';
            });
            echo "</td>";
        } else {
            echo "<td></td>";
        }
    }
    echo "</tr>";
}
   echo "</tbody>
    </table>";
     ?>

скриптовая ссылка http://sandbox.onlinephpfunctions.com/

0 голосов
/ 21 декабря 2018

Проверьте этот HTML

<table border="1">
    <thead>
        <tr>
            <th>Participant</th>
            <th>Monday</th>
            <th>Tuesday</th>
            <th>Wednesday</th>
            <th>Thrusday</th>
            <th>Friday</th>
            <th>Satday</th>
            <th>Sunday</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($array as $participant => $event): ?>
            <tr>
                <td><?= $participant ?></td>
                <?php foreach ($event as $i => $value): ?>
                    <td>
                        <?php foreach ($value as $index => $eventD): ?>
                            <?php echo $eventD['event'] . '<br/>'; ?>
                        <?php endforeach ?>
                    </td>
                <?php endforeach ?>
            </tr>
        <?php endforeach ?>
    </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...