【发布时间】:2018-05-30 13:50:29
【问题描述】:
我一直在尝试这样做一段时间,但我似乎无法做到这一点。 One post 让我非常接近但不是很接近,因为我的 JSON 的层次结构。 (这是一个任务,这个层次结构是强制性的。)
我现在要做的是从一个页面提交信息,将其发布到我在另一个页面上的 php 中,将其保存在一个数组中,json_encode 该数组并将其写入我的 JSON 文件。
这是我的淡化代码,希望能去掉大部分不必要的代码:
<?php
$filename = "json/exercises.json";
$filesize = filesize($filename);
$fp = fopen($filename, "r+");
#Accept the submitted form
$exLanguage = $_POST['exLanguage'];
$exTitle = $_POST['exTitle'];
$exStuff = $_POST['exStuff'];
#write to JSON with an incrementing ID
if (file_get_contents($filename) == "") {
$exercise = array (
"id" => 1,
"lang" => $exLanguage,
"title" => $exTitle,
"main_object" =>
[
"exStuff" => $exStuff
]
);
$exercise_json = json_encode($exercise, JSON_PRETTY_PRINT);
file_put_contents($filename, $exercise_json, FILE_APPEND);
} else {
#Get the last set ID
$jsonid = json_decode(fread($fp, $filesize), true);
$last = end($jsonid);
$title = prev($jsonid);
$lang = prev($jsonid);
$id = prev($jsonid);
$exercise = array (
"id" => ++$id,
"lang" => $exLanguage,
"title" => $exTitle,
"main_object" =>
[
"exStuff" => $exStuff
]
);
$exercise_json = json_encode($exercise, JSON_PRETTY_PRINT);
file_put_contents($filename, $exercise_json, FILE_APPEND);
}
?>
现在,如果我的 json 为空,它会正确添加第一个数组,ID 为 1。然后,如果我尝试再次添加到我的 json,它会正确添加它,ID 为 2。但任何更多尝试写入到 JSON 会给我这些错误:
警告:end() 期望参数 1 为数组,给定为空
警告:prev() 期望参数 1 是数组,给定 null
警告:prev() 期望参数 1 是数组,给定 null
警告:prev() 期望参数 1 是数组,给定 null
我试过了
$reset = reset($jsonid);
在写入文件后但没有成功,只是在第三次写入时给了我另一个错误,因为重置也被赋予了空值。
谁能告诉我如何使它也能正常工作?或者是否有更简单的方法来完成这项工作?
【问题讨论】:
-
这是一个 50:50 的猜测。你
$fp = fopen($filename, "r+");使得$fp和文件的一行一行的数组。那么你$jsonid = json_decode(fread($fp, $filesize), true);和$fp仍然是一个数组。我认为这行不通。我认为$jsonid = json_decode(file_get_contents($filename), true);可能有用。
标签: php arrays json auto-increment