所以,我有一个表,它是由MySQL查询产生的。此查询是MySQL DB中两个表的内部联接,其中一个提供产品名称,另一个提供HTML中的价格表(可以包含2个或更多列,以及可变行数)。
Mysql查询:
SELECT catalog_product_entity_varchar.value as `name`, catalog_product_entity_text.value as `html_table` from catalog_product_entity_varchar INNER JOIN catalog_product_entity_text on catalog_product_entity_varchar.entity_id=catalog_product_entity_text.entity_id AND catalog_product_entity_text.attribute_id=171 AND catalog_product_entity_varchar.attribute_id=71"
要输出表格,我使用了以下内容:
echo '<table border="1">';
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo
'<th>'.$row["name"]. '</th><tr><td>'. $row["html_table"].'</td></tr>';
}
现在,我需要更改&#34; html_table&#34;部分,具体来说,来自第二列的第二行(第一行是文本)(第一行也是文本)。
我已经查看了几个解析器,比如simplehtmldom或DOM类的php,但我仍然无法掌握如何更改那些特定的行/列。
任何建议都将不胜感激!
答案 0 :(得分:0)
您需要执行两个步骤:
答案 1 :(得分:0)
您真正需要做的就是在while循环中添加一个条件来跳过表格标题和某种格式化函数。
echo '<table border="1">';
if ($result->num_rows > 0) {
// output data of each row
//This boolean flag will determine if the row is the header (first row),
//and skip formatting for this row
$header_row = true;
//We can use a closure here to do our custom formatting.
//If you have another formatting method elsewhere,
//use that instead of this.
$format_html_table = function($data) {
//manipulate $data here based on what you need to do for formatting
//for all of the non-header rows
//ex: $data = ...
return $data;
};
while($row = $result->fetch_assoc()) {
if ($header_row) {
$html_table = $row["html_table"];
} else {
$html_table = $format_html_table($row["html_table"]);
}
echo
'<th>'.$row["name"]. '</th><tr><td>'. $html_table.'</td></tr>';
//We set the boolean flag to false here after the first row has processed,
//so all remaining rows will be formatted.
$header_row = false;
}
真的没有理由为此弄乱dom解析器。在生成任何标记之前,您只需对数据库中的原始源数据响应执行编辑。