所以我有一个数据文件包含所有应该是JSON格式的“事件”:
[{"id":"4f946d7a31b27", "title":"Floss the Otter", "start":1333252800, "end":1333339199}]
更多事件只是更多JSON对象[{},{},...]。我写了一个函数来尝试和 将数据文件作为JSON对象数组获取,以将新事件取消移入,并将其写回数据文件,但我不断获得空返回,而不是数组。
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$title = $_POST['title'];
$start = $_POST['start'];
$end = $_POST['end'];
$event = array(
'id' => md5($title),
'title' => $title,
'start' => $start,
'end' => $end
);
$data = get_data();
array_unshift($data, $event);
if ($fp = fopen($data_file, "w")){
fwrite($fp, json_encode($data));
fclose($fp);
}
}
function get_data() {
$str = "";
if ($fp = fopen($data_file, "r")){
while($line = fgets($fp)) {
$str = $str . $line;
}
$data = json_decode($str, true);
return $data == NULL ? array() : $data;
}
}
如果我写出变量$event
而不是应该是数组$data
,那么该文件包含一个JSON对象,所以我担心我的方法从文件转换为数组不正确。提前致谢
答案 0 :(得分:1)
$data_file
未在get_data
函数中定义,因此fopen
将失败;该函数没有return
任何东西(因此NULL
)。
答案 1 :(得分:1)
尝试
<?php
function get_data($data_file) {
if (!file_exists($data_file)) {
return array();
}
$str = trim(file_get_contents($data_file));
return 0 < strlen($str) ? json_decode($str, true) : array();
}
if ($_POST) {
$title = $_POST['title'];
$start = $_POST['start'];
$end = $_POST['end'];
$event = array(
'id' => md5($title),
'title' => $title,
'start' => $start,
'end' => $end
);
$data_file = __DIR__ . '\file.ext'; // file that contains your json data
$data_array = get_data($data_file);
array_unshift($data_array, $event);
file_put_contents($data_file, json_encode($data_array));
}