创建带换行符的数组以重写 json (json_encode)

问题描述

我正在从 PHP 创建一个 json 文件,想法是始终插入数据库中的最后一条记录,该记录重写 results.json 文件

<?PHP 

    require_once __DIR__ . '/sql.PHP';

    $system = new System();

    $sql= $system->SelectLastData();

    $response = array();
    $posts = array();

    while($row=$sql->fetch(PDO::FETCH_ASSOC))
        {
            $id=$row['id']; 
            $name=$row['name']; 
            $posts[] = array('id'=> $id,'name'=> $name);
        }

    $response['posts'] = $posts;

    $fp = fopen('results.json','w');
    fwrite($fp,json_encode($response,JSON_PRETTY_PRINT));
    fclose($fp);

?>

到目前为止一切顺利,我获取了最新数据,将其传递给数组并将其保存在 results.json 文件

{
    "posts": [
        {
            "id": "50","name": "John Smith"
        }
    ]
}

我遇到的问题是在用新的最后数据写入 results.json 文件时,它没有添加它,而是生成一个新的 results.json 文件

我想要的是你重写文件并保存一个新的数据(如示例中所示),你可以帮我解决这个问题。

示例:

{
    "posts": [
        {
            "id": "50","name": "Charlotte Johnson"
        },{
            "id": "51","name": "emma Jones"
        },{
            "id": "52","name": "Benjamin Miller"
        }
    ]
}

解决方法

从文件中获取现有数据。向现有数据添加新数据。保存文件。

$data = json_decode(file_get_contents('results.json'));

while($row=$sql->fetch(PDO::FETCH_ASSOC))
{
    $data->posts[] = array('id'=> $row['id'],'name'=> $row['name']);
}

file_put_contents('results.json',json_encode($data,JSON_PRETTY_PRINT));

根据需要添加健全性检查。例如。如果文件还不存在。