[英]Formatting php array to a tree like structure
我有以下數組:
$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;
這給了我以下 output:
<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>
但我想要這種格式的 output。
<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;
從我的嘗試代碼中可以看出,我錯過了主類別的每個循環的一行。 誰能幫我?
我認為您不需要 else 並且僅在$prevMain
和$currentMain
不同時添加 colspan 部分。
$prevMain = "";
$currentMain = "";
$html = "";
foreach($array as $row):
$currentMain = $row["categoryName"];
if($currentMain !== $prevMain) {
$prevMain = $row["categoryName"];
$html .= '<tr>' .
'<td colspan="2">' . $row['categoryName'] . '</td>' .
'<td></td>' .
'</tr>';
}
$html .='<tr>'.
'<td>'.$row['date'] .'</td>'.
'<td>'.$row['title'].'</td>'.
'<td>'.$row['score'] . '</td>'.
'</tr>';
endforeach;
echo $html;
查看php 演示
請注意,我已將$prevmain
重命名為$prevMain
格式化表格行結構 output 后將如下所示:
<tr>
<td colspan="2">Main One</td>
<td></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>
<td></td>
</tr>
<tr>
<td>2019-09-02</td>
<td>Other title</td>
<td>2100</td>
</tr>
<tr>
<td colspan="2">Main Three</td>
<td></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>
用這個更新你的foreach:
$html = '';
$html = '<table>';
foreach($array as $row){
$html .= '<tr>';
$html .= '<td colspan="2">'.$row["currentMain"].'</td>';
$html .= '<td></td>';
$html .= '</tr>'
$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;
這是一個多維數組。 您可以在 foreach 循環中使用 key:
foreach($array as $key => $row) {
echo $row['categoryName']; ....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.