我有这个包含用户消息的数组。它包含在变量$arr
中,它是一个数组。
$arr
时, var_dump()
看起来像这样
我想要做的是合并[0]
和[1]
中的表格并得到这样的结果。
请提及我错过或您想知道的事情。任何想法都会非常感激!
答案 0 :(得分:4)
要连接同一个表中的某些行,您只需将它们从原始表中提取出来,然后将它们提取到与常用文本部分连接的表中。为此,请举例:
我会将我的文本放在一个数组中:
$data = [
'Dear User2,<br> <br> Sample text <table style="border-collapse:collapse; width:100%" border="solid"> <tr> <th>TH1</th> <th>TH2</th> <th>TH3</th> </tr> <tr> <td style="width:10%"><center>1</center></td> <td style="width:20%"><center>foo1</center></td> <td style="width:20%"><center>foo1</center></td> </tr> </table> <br> Thank you, <br> Admin',
'Dear User2,<br> <br> Sample text <table style="border-collapse:collapse; width:100%" border="solid"> <tr> <th>TH1</th> <th>TH2</th> <th>TH3</th> </tr> <tr> <td style="width:10%"><center>2</center></td> <td style="width:20%"><center>foo2</center></td> <td style="width:20%"><center>foo2</center></td> </tr> </table> <br> Thank you, <br> Admin',
'Dear User2,<br> <br> Sample text <table style="border-collapse:collapse; width:100%" border="solid"> <tr> <th>TH1</th> <th>TH2</th> <th>TH3</th> </tr> <tr> <td style="width:10%"><center>3</center></td> <td style="width:20%"><center>foo3</center></td> <td style="width:20%"><center>foo3</center></td> </tr> </table> <br> Thank you, <br> Admin'
];
常见部分是:
Dear User2,<br> <br> Sample text <table style="border-collapse:collapse; width:100%" border="solid"> <tr> <th>TH1</th> <th>TH2</th> <th>TH3</th> </tr>
和
</table> <br> Thank you, <br> Admin
因此,如果公共部分始终相同且长度固定,您可以使用一些substr()
来提取您需要的内容,例如:
// get common parts
$common_part_1 = substr($data[0], 0, 151);
$common_part_2 = substr($data[0], -36);
$content = '';
// concatenate all content rows
for($i = 0; $i < count($data); $i++){
$content .= get_content($data[$i]);
}
其中get_content()
是将提取包含目标文本的行的函数:
function get_content($data){
return substr($data, 151 , strlen($data) - 36 - 151);
}
然后
echo $common_part_1 . $content . $common_part_2;
当然这种方式非常有限,我不建议你使用它,但我试着想一想你怎么做......
第二种方式是使用带preg_match()
功能的regex
提取文字:
// extract the 1st content row
$content = get_content($data[0]);
// extract the common parts
$common_parts = str_replace($content, '##content##', $data[0]);
// concatenate all content rows
for($i = 1; $i < count($data); $i++){
$content .= get_content($data[$i]);
}
和
function get_content($data){
$pattern = '/\<\/th\>\s\<\/tr\>(.*)\<\/table\>/';
preg_match($pattern, $data, $matches);
return $matches[1];
}
然后
echo str_replace('##content##', $content, $common_parts);
这将为您提供以下两种方式:
希望可以提供帮助。
答案 1 :(得分:1)
您可以将$message
拆分为多个部分。
$message = '
Dear User {APPROVER_SL},<br>
<br>
Sample text
<table style="border-collapse:collapse; width:100%" border="solid">
<tr>
<th>TH1</th>
<th>TH2</th>
<th>TH3</th>
</tr>';
$max = 10 // Your number of lines
for($i =0; $i < $max ; $i++){
$message .= '
<tr>
<td style="width:10%"><center>'.$i.'</center></td>
<td style="width:20%"><center>foo'.$i.'</center></td>
<td style="width:20%"><center>foo'.$i.'</center></td>
</tr>';
}
$message .='
</table>
<br>
Thank you, <br>
{SYSTEM_NAME}';
尝试将CSS集成到代码中,以便您的代码看起来不那么混乱并且更易于管理。
答案 2 :(得分:0)
请尝试此代码这是示例代码,但您尝试这种逻辑,因为它肯定会帮助您而不是......
<!DOCTYPE html>
<html>
<head>
<title>Array</title>
</head>
<body>
<?php
$arr = array
(
array("Upendrasinh",100,100),
array("Ankit dave",200,200),
array("Krunal Lathiya",300,300),
array("Arjun Kanani",400,400),
);
$arrCount = count($arr);
// $arrsubcount = count($arr[0]);
// echo $arrsubcount;
// echo "<br>";
$arraycell=count($arr[0][0]);
$arraycell=$arraycell;
echo '<table border="5px" width="100%">';
echo "<tr>";
echo "<th>Name</th>";
echo "<th>Score</th>";
echo "<th>Score2</th>";
echo "</tr>";
for($arrayrow=0;$arrayrow<=$arrCount-1;$arrayrow++){
echo "<tr>"."<td>".$arr[$arrayrow][0]. "</td>";
for($arraycolumn=0;$arraycolumn<$arraycell;$arraycolumn++){
echo "<td>".$arr[$arrayrow][$arraycell]."</td>";
echo "<td>".$arr[$arrayrow][$arraycell+1]."</td>"."</tr>";
}
}
echo '</table>';
?>
</body>
</html>