Похоже, модуль csv ожидает строки, а не bytes
. Таким образом, вы можете дешифровать свой bytes
перед их передачей:
cell.text.encode('ascii', 'replace').decode('ascii')
Попробуйте этот код по вашему мнению. Я только добавил счетчик для отслеживания количества действий для каждого пользователя и отслеживания текущей позиции в цикле, чтобы распечатать только один заголовок таблицы и информацию о пользователе для каждого пользователя:
<?php
foreach ($SActivity as $sec_data) {
$counter = 0; // COUNTER FOR KNOWING POSITION IN ACTIVITIES LOOP
$num_activities = count($sec_data); // TOTAL NUMBER OF ACTIVITIES FOR THIS USER
foreach ($sec_data as $row) {
$counter++; // ADD +1 TO COUNTER FOR EACH ACTIVITY
// ONLY PRINT OUT THE NAME AND TABLE HEADER IF FIRST ROW
if($counter == 1){ ?>
<h2><?php echo $row->first_name;?><?php echo $row->last_name;?></h2>
<p><?php echo $row->email;?></p>
<table>
<thead>
<tr>
<th>ActivityName</th>
<th>Activity_startTime</th>
<th>Activity_endTime</th>
</tr>
</thead>
<tbody>
<?php } ?>
<tr>
<td><?php echo $row->ActivityName;?></td>
<td><?php echo $row->Activity_startTime;?></td>
<td><?php echo $row->Activity_endTime;?></td>
</tr>
<?php
// IF THIS IS THE LAST ACTIVITY OF THIS USER IN THE LOOP: PRINT TABLE END TAG
if($counter == $num_activities){
echo '</tbody></table>';
}
}
}
?>