为什么为PHP数组返回null?

时间:2013-05-18 17:04:12

标签: php json

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

2 个答案:

答案 0 :(得分:1)

{p> $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));
    }