こんな感じでしょうか。
php
1<?php
2$data = [
3 ['A' => 'red', 'B' => 1],
4 ['A' => 'red', 'B' => 2],
5 ['A' => 'green', 'B' => 3],
6 ['A' => 'green', 'B' => 4],
7 ['A' => 'green', 'B' => 5],
8 ['A' => 'blue', 'B' => 6],
9 ['A' => 'blue', 'B' => 7],
10 ['A' => 'black', 'B' => 8],
11 ['A' => 'red', 'B' => 9],
12];
13
14function groupSort($array) {
15 $groups = [];
16 foreach ($array as $record) $groups[$record['A']][] = $record;
17
18 $result = [];
19 foreach ($groups as $group) {
20 foreach ($group as $idx => $record) {
21 $record['_span'] = $idx === 0 ? count($group) : 0;
22 $result[] = $record;
23 }
24 }
25 return $result;
26}
27
28$spannedData = groupSort($data);
29function output($str) { echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); }
30?>
31<table>
32 <thead>
33 <tr>
34 <th>A</th>
35 <th>B</th>
36 </tr>
37 </thead>
38 <tbody>
39<?php foreach ($spannedData as $record) : ?>
40 <tr>
41<?php if ($record['_span'] > 0) : ?>
42 <td rowspan="<?php output($record['_span']) ?>"><?php output($record['A']); ?></td>
43<?php endif; ?>
44 <td><?php output($record['B']); ?></td>
45 </tr>
46<?php endforeach; ?>
47 </tbody>
48</table>
html
1<table>
2 <thead>
3 <tr>
4 <th>A</th>
5 <th>B</th>
6 </tr>
7 </thead>
8 <tbody>
9 <tr>
10 <td rowspan="3">red</td>
11 <td>1</td>
12 </tr>
13 <tr>
14 <td>2</td>
15 </tr>
16 <tr>
17 <td>9</td>
18 </tr>
19 <tr>
20 <td rowspan="3">green</td>
21 <td>3</td>
22 </tr>
23 <tr>
24 <td>4</td>
25 </tr>
26 <tr>
27 <td>5</td>
28 </tr>
29 <tr>
30 <td rowspan="2">blue</td>
31 <td>6</td>
32 </tr>
33 <tr>
34 <td>7</td>
35 </tr>
36 <tr>
37 <td rowspan="1">black</td>
38 <td>8</td>
39 </tr>
40 </tbody>
41</table>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。