php – 将多个表的结果插入一个json_encode()

请原谅我的语言错误,我说法语.

在这个网站和其他地方做过一些研究,但我发现的并没有解决我的问题.

我正在做一个人们可以发布故事的网站.我正在编写一个页面,作者应该能够看到他们的每个故事和章节.

我对两个表格进行查询获取故事和章节的标题.我有一个表“故事”,其中有每个故事的标题摘要(和其他东西,如身份证和出版日期).另一个名为“章节”的表格,其中有每章的标题和它们所属的故事的ID.

我想稍后在我的html中检索这些项目,得到类似的东西:

故事标题1

第1章

第2章

所以我做一个json_encode(),但是JSONLint说我得到的json是无效的. PHP对我来说是新手,我开始学习,所以我可能没有正确编写代码.

这是我的代码

<?PHP
session_start();
require_once('connexion_db.PHP');

if($db=connect()){
    $userID = $_SESSION['id'];

    $arr = array();

    $reqRecits = $db->query('SELECT titre, id FROM recits WHERE user_id = '.$userID.'');
    $resRecits = $reqRecits->fetchAll(PDO::FETCH_ASSOC);

    foreach ($resRecits as $r){
        $recitID = $r['id'];
        $recitTitre = $r['titre'];

        $reqChapitres = $db->query('SELECT id, titre_chapitre FROM chapitres WHERE recit_id = '.$r['id'].'');
        $resChapitres = $reqChapitres->fetchAll(PDO::FETCH_ASSOC);

        foreach ($resChapitres as $c){
            $chapTitre = $c['titre_chapitre'];
        }

        $arr = array('titre'=>$recitTitre,'chapitre'=>$chapTitre);
        echo json_encode($arr, JSON_UnesCAPED_UNICODE);
    }

}else{
    echo "bdd non connectée.";
}
?>

我测试了here提出的方法,但结果更糟.
我不知道该怎么办 :(

谢谢你的帮助!

解决方法:

看起来你想要内循环更像这样:

$chapTitre = array();
foreach ($resChapitres as $c){
  $chapTitre[] = $c['titre_chapitre'];
}

因此,您生成的JSON将包含所有章节标题.

此外,就目前而言,您列出了一系列未连接的JSON对象,它们应该是一个合法的JSON对象的单个数组.

foreach ($resRecits as $r){
    $recitID = $r['id'];
    $recitTitre = $r['titre'];

    $reqChapitres = $db->query('SELECT id, titre_chapitre FROM chapitres WHERE recit_id = '.$r['id'].'');
    $resChapitres = $reqChapitres->fetchAll(PDO::FETCH_ASSOC);

    $chapTitre = array();
    foreach ($resChapitres as $c){
      $chapTitre[] = $c['titre_chapitre'];
    }

    $arr[] = array('titre'=>$recitTitre,'chapitre'=>$chapTitre);
}

echo json_encode($arr, JSON_UnesCAPED_UNICODE);

将它们全部收集并作为列表输出.

[
  { 
    'titre': 'Title 1',
    'chaptitre': ['Chapter 1', 'Chapter 2']
  },
  { 
    'titre': 'Title 2',
    'chaptitre': ['Chapter 1', 'Chapter 2', 'Chapter 3']
  },
]

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...