You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:45:48