У меня есть следующий массив:
$array = [
1 => [
'categoryName'=>'Main One',
'title'=>'Title one',
'date'=>'2019-09-01',
'score'=>2500
],
2 => [
'categoryName'=>'Main One',
'title'=>'Title two',
'date'=>'2019-09-02',
'score'=>3000
],
3 => [
'categoryName'=>'Main Two',
'title'=>'Other title',
'date'=>'2019-09-02',
'score'=>2100
],
4 => [
'categoryName'=>'Main Three',
'title'=>'Other title',
'date'=>'2019-09-05',
'score'=>200
],
5 => [
'categoryName'=>'Main Three',
'title'=>'Other topic',
'date'=>'2019-09-02',
'score'=>1000
]
];
Так что, если я запускаю цикл foreach на нем:
$html = '';
$html = '<table>';
foreach($array as $row){
$html .= '<tr>';
$html .= '<td>'.$row['categoryName'].'</td>';
$html .= '<td>'.$row['title'].'</td>';
$html .= '<td>'.$row['date'].'</td>';
$html .= '<td>'.$row['score'].'</td>';
$html .= '<tr>';
}
$html .='</table>';
echo $html;
Это дает мне следующий вывод:
<table border=1>
<tbody>
<tr>
<td>Main One</td>
<td>Title one</td>
<td>2019-09-01</td>
<td>2500</td>
</tr>
<tr>
<td>Main One</td>
<td>Title two</td>
<td>2019-09-02</td>
<td>3000</td>
</tr>
<tr>
<td>Main Two</td>
<td>Other title</td>
<td>2019-09-02</td>
<td>2100</td>
</tr>
<tr>
<td>Main Three</td>
<td>Other title</td>
<td>2019-09-05</td>
<td>200</td>
</tr>
<tr>
<td>Main Three</td>
<td>Other topic</td>
<td>2019-09-02</td>
<td>1000</td>
</tr>
</tbody>
</table>
Но я хочу вывод в этом формате.
<table border=1>
<tbody>
<tr>
<td colspan="2">Main One</td>
</tr>
<tr>
<td>2019-09-01</td>
<td>Title One</td>
<td>2500</td>
</tr>
<tr>
<td>2019-09-02</td>
<td>Title Two</td>
<td>3000</td>
</tr>
<tr>
<td colspan="2">Main Two</td>
</tr>
<tr>
<td>2019-09-02</td>
<td>Other title</td>
<td>2100</td>
</tr>
<tr>
<td colspan="2">Main Three</td>
</tr>
<tr>
<td>2019-09-05</td>
<td>Other Title</td>
<td>200</td>
</tr>
<tr>
<td>2019-09-02</td>
<td>Other topic</td>
<td>1000</td>
</tr>
</tbody>
</table>
Я не мог понять, как это сделать внутри цикла foreach. Что я попробовал:
$prevmain = "";
foreach($array as $row):
$currentMain = $row['categoryName'];
if($currentMain!=$prevMain){
$html .='<tr>
<td colspan="2">'.$row['currentMain'].'</td>
<td></td>
</tr>';
} else{
//Here I miss data for the first loop
$html .='<tr>
<td>'.$row['date].'</td>
<td>'.$row['title'].'</td>
<td>'.$row['score].'</td>
</tr>';
}
$prevmain = $row['categoryName'];
endforeach;
Как видно из кода моей попытки, я пропускаю по одной строке для каждого цикла основной категории. Кто-нибудь может мне помочь?