我有一個簡單的表,需要以與該區域相關的權限出現在同一行中的方式輸出資料。
user | page | permission
-------------------------------
Jon | books | read
Jon | books | delete
Jon | photos | read
Jon | photos | edit
所需的 HTML 輸出(不是新表格):
user | page | read | edit | delete
-----------------------------------------------
Jon | books | X | | X
Jon | photos | X | X |
基本上我需要輸出資料并將具有相同用戶和頁面的所有行合并為一行,其中權限成為列。
echo '<table>';
foreach ($data as $row) {
echo
($row['user'] == $user && $row['page'] == $page ? '' : '<tr>').'
<th>'.($row['user'] == $user ? '' : $row['user']).'</th>
<td>'.($row['page'] == $page ? '' : $row['page']).'</td>
'.($row['permission'] == 'Create' && $row['role'] != $role && $row['page'] != $page ? '<td>x</td>' : '').'
'.($row['permission'] == 'read' ? '<td>x</td>' : '').'
'.($row['permission'] == 'edit' ? '<td>x</td>' : '').'
'.($row['permission'] == 'delete' ? '<td>x</td>' : '').'
'.($row['user'] != $user && $row['page'] != $page ? '</tr>' : '');
$user = $row['user'];
$page = $row['page'];
}
echo '</table>';
理論上這應該可行,但我的列正在添加額外的單元格。我錯過了什么?
uj5u.com熱心網友回復:
我會預處理該 $data 以對您想要的格式友好。所以像這樣
$sorted = array();
foreach ($data as $row) {
if (!isset($sorted[$row['user']])) $sorted[$row['user']]=array();
if (!isset($sorted[$row['user']][$row['page']]) $sorted[$row['user']][$row['page']] = array('read' => false, 'edit' => false, 'delete' => false);
$sorted[$row['user']][$row['page']][$row['permission']] = true;
}
然后你可以像這樣回圈
foreach ($sorted as $user => $page) {
foreach ($page as $pagename => $perms) {
echo "<tr><td>$user</td><td>$pagename</td>";
foreach ($perms as $perm => $bool) {
echo "<td>" . ($bool ? "x" : "") . "</td>";
}
echo "</tr>";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/370964.html
標籤:php
