0

所以我有一个数据文件,其中包含所有应该采用 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 对象,所以我担心我从文件转换为数组的方法不正确。提前致谢

4

2 回答 2

1

$data_file未在get_data函数中定义,因此fopen会失败;该函数没有return任何作用(也是如此NULL)。

于 2013-05-18T17:07:28.423 回答
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));
    }
于 2013-05-18T17:09:09.547 回答