使用PHP将新对象附加到外部JSON文件中存在的数组中

时间:2014-08-27 23:08:24

标签: php arrays json append

这里的第一次海报有一些可能没那么复杂的问题。首先,我对PHP的经验非常少,所以如果我遗漏了一些明显的东西,或者我要求进一步澄清,我会道歉。到目前为止,一切都是客户端的HTML / JavaScript。

我希望将注册系统纳入我的应用程序。它适用于物理治疗师程序,其中用户详细信息存储在JSON文件中。 (我知道有更好的选择)。

JSON内容目前采用以下格式:

{"users":[
    {
        "userid": "0",
        "password":"template",
        "physio": "test@test.com",
        "firstName":"template",
        "lastName":"template",
        "exerciseregime": {
            "exercisenumber":"5",
            "exercises":["2","1", "3", "5", "4"]
        }
    },
    {
        "userid": "1",      
        "password":"user",
        "physio": "UserPhysio@hotmail.co.uk",
        "firstName":"User",
        "lastName":"Physio",
        "exerciseregime": {
            "exercisenumber":"1",
            "exercises":["2"]

        }
    },

等等。我要做的是使用从表单中获取的详细信息,并以这种格式将它们添加到现有用户数组中。

我目前使用的代码是

<?php
$file = "userjson.json";
$FirstName = $_POST["FirstName"];
$Surname = $_POST["Surname"];
$Password = $_POST["Password"];  
$Email = $_POST["email"];
$UserID = $_POST["UserID2"];

$json = json_decode(file_get_contents($file), true); 
$json["firstName"] = $FirstName;
$json["lastName"] = $lastName;
$json["password"] = $Password;
$json["physio"] = $Email;
$json["UserID"] = $UserID;



file_put_contents($file, json_encode($json));

?>

used a previous answer在网站上找到了这个。详细信息将保存到JSON文件中,但格式不正确。而不是以新用户身份添加现有数组,而是在数组之后而不是在其中添加新对象。我将如何解决此问题并创建一个新的用户&#34;用户数组内?

另外,第二个问题但不重要:我将如何在这个新对象内部编写数组?我试图添加&#34; Exerciseregime&#34;数组到对象。

我非常感谢你的帮助,我很感谢你的考虑。

1 个答案:

答案 0 :(得分:0)

编辑我的第一个代码不正确。我忘了指定ID并定位“users”数组。

试试这个:

$json = json_decode(file_get_contents($file), true); 
$nextid = sizeof($json['users']);
$json['users'][$nextid]['firstName'] = $FirstName;
$json['users'][$nextid]['lastName'] = $Surname;
$json['users'][$nextid]['password'] = $Password;
$json['users'][$nextid]['physio'] = $Email;
$json['users'][$nextid]['UserID'] = $UserID;

file_put_contents($file, json_encode($json));

基本上每个用户在该JSON数组中都有一个ID密钥。您还需要为新用户提供密钥。

此外,您在底部有$lastName,在顶部有$Surname。也许想解决这个问题。我在底部添加$Surname以匹配顶部。

回答您的第二个问题

你基本上只会这样做:

$json['users'][$nextid]['exerciseregime']['exercisenumber'] = 1;
$json['users'][$nextid]['exerciseregime']['exercises'] = 2;