PHP+MySQL如何将主题内容与多章节标题合并为单个字符串
问题描述
我有两张数据库表:topics和sections,一个topics对应多个sections,通过topic_id关联。表结构如下:
topics表
id title content
sections表
id title topic_id
原本的展示代码是这样的:
<?php $show_topics = $topics->select_topics($page); while ($rows_topics = mysqli_fetch_array($show_topics [0])) { $id_topic = $rows_topics['id']; $title_topic = $rows_topics['title']; $content_topic = $rows_topics['content']; echo $content_topic; $select_sections = $topics->view_section_limit($id_topic, 0, 100); while ($rows_sections = mysqli_fetch_array($select_sections)) { $id_section = $rows_sections['id']; $section_title = $rows_sections['title']; echo $section_title; } } ?>
为了把内容合并成单个字符串用于更新主题内容,我改成了下面的代码:
<?php $show_topics = $topics->select_topics($page); while ($rows_topics = mysqli_fetch_array($show_topics [0])) { $id_topic = $rows_topics['id']; $title_topic = $rows_topics['title']; $content_topic = $rows_topics['content']; $select_sections = $topics->view_section_limit($id_topic, 0, 100); while ($rows_sections = mysqli_fetch_array($select_sections)) { $id_section = $rows_sections['id']; $section_title = $rows_sections['title']; $all_content = $content_topic." ".$section_title; echo $all_content; } } ?>
但这段代码会重复拼接content_topic和每个section_title,比如content_topic是「this is a beautiful day」,3个章节标题是「camera 1」「camera 2」「camera 3」时,结果变成了「this is a beautiful day camera 1 this is a beautiful day camera 2 this is a beautiful day camera 3」,而我想要的是「this is a beautiful day camera 1 camera 2 camera 3」,用来执行$edit_content = $topics->edit_topic_content($all_content, $id_topic);更新主题内容。
解决方案
问题出在你每次循环章节时都重新给$all_content赋值,导致每次都把content_topic和当前章节标题拼接,而不是累加所有章节标题。正确的做法是先把$all_content初始化为content_topic,然后在章节循环里把每个章节标题追加进去:
<?php $show_topics = $topics->select_topics($page); while ($rows_topics = mysqli_fetch_array($show_topics [0])) { $id_topic = $rows_topics['id']; $title_topic = $rows_topics['title']; $content_topic = $rows_topics['content']; // 初始化all_content为主题内容 $all_content = $content_topic; $select_sections = $topics->view_section_limit($id_topic, 0, 100); while ($rows_sections = mysqli_fetch_array($select_sections)) { $section_title = $rows_sections['title']; // 把章节标题追加到all_content后面,用空格分隔 $all_content .= " " . $section_title; } // 现在all_content就是合并后的结果,可输出或执行更新 echo $all_content; $edit_content = $topics->edit_topic_content($all_content, $id_topic); } ?>
补充说明
- 使用
.=运算符实现字符串追加,避免重复添加主题内容; - 如果担心空章节标题导致多余空格,可以在追加前判断
$section_title是否非空,再执行拼接操作。
内容的提问来源于stack exchange,提问作者Mahmoud Samy
相关产品推荐
相关产品推荐

