这是我的代码
<?php
//json reader and writer for events Title,description,image,id
// contact_details
class ffile {
var $file_name = null;
var $file_content;
function __construct($name)
{
$this->file_name = $name;
$this->file_content = file_get_contents($this->file_name);
echo "size: " . filesize($this->file_name) . "<br/> Content" . $this->file_content . "<br/><br/><br/>";
}
function file_clear()
{
file_put_contents($this->file_name, '');
}
function write($str)
{
echo '<br/> Writing' . $str . '<br/>';
file_put_contents($this->file_name, $str);
}
function get_data()
{
return $this->file_content;
}
}
class CreateEvent {
var $id;
var $title;
var $description;
var $image;
var $contact_name;
var $contact_number;
var $email;
var $date;
var $file_name;
var $jsonStr;
var $jsonArr;
function getId()
{
//will implement it later
return 3;
}
function __construct($filename, $title, $desc, $image, $cname, $cnumber, $email, $date)
{
$this->id = $this->getId() + 1;
$this->title = $title;
$this->description = $desc;
$this->image = $image;
$this->contact_name = $cname;
$this->contact_number = $cnumber;
$this->email = $email;
$this->date = $date;
$this->file_name = $filename;
$jsonArr = array($this->id => array(
'title' => $this->title,
'description' => $this->description,
'image' => $this->image,
'contact-name' => $this->contact_name,
'contact-number' => $this->contact_number,
'email' => $this->email,
'date' => $this->date
)
);
$this->jsonStr = json_encode($jsonArr, JSON_UNESCAPED_UNICODE);
}
function write()
{
$ab = new ffile($this->file_name);
$nnew = $this->jsonStr;
if (filesize($this->file_name) != 0) {
$jjdata = $ab->get_data();
echo "<br/>Contents " . $jjdata . "This was data <br/> <br/>";
$old = json_decode(html_entity_decode(stripslashes(($jjdata))));
echo '<br/>Decoded string: ' . print_r($old) . '<br/>' . json_last_error() . '<br/>';
echo "<br/>Json DEcoded" . var_dump($old) . "This was decoded json data <br/>Json str:" . $this->jsonStr . '<br/>';
$nnew = array_push($old, $this->jsonArr);
echo "<br/>Raw array " . print_r($nnew) . "<br/>";
}
$ab->write($nnew);
}
}
$jso = new CreateEvent("aka.json", "ttile", "description", "image", "contactname", "contactnumber", "email", "date");
$jso->write();
问题出现在CreateEvent类的write函数中。当我第二次运行代码时(记得弄清楚发生了什么,你必须运行它两次)json_decode正在做一些我无法弄清楚的事情< / p>
我正在运行php:PHP 5.5.9-1ubuntu4.14(cli)(建于:2015年10月28日01:34:46)
答案 0 :(得分:0)
要求:将新的detail
记录附加到包含PHP数组details
作为JSON文本的文件中。
每个详细记录都是一个PHP数组。
//json reader and writer for events Title,description,image,id
// contact_details
class ffile {
public $file_name = null;
public $file_content = null;
function __construct($name)
{
$this->file_name = $name;
if (file_exists($this->file_name)) {
$this->file_content = file_get_contents($this->file_name);
}
}
function file_clear()
{
file_put_contents($this->file_name, null);
}
function write($str)
{
file_put_contents($this->file_name, $str);
}
function get_data()
{
return $this->file_content;
}
}
class CreateEvent {
public $id;
public $title;
public $description;
public $image;
public $contact_name;
public $contact_number;
public $email;
public $date;
/**
* file to store the JSON string in
* @var string
*/
public $file_name;
/**
* The imput details as a PHP array
* @var array
*/
public $phpArr;
/**
* The input detail array (phpArray) as a JSON encodd string
* @var string
*/
public $jsonStr;
function getId()
{
//will implement it later
return 3;
}
/**
* Convert the input details to a PHP array
* then convert the array to a JSON string
*
* @param type $filename
* @param type $title
* @param type $desc
* @param type $image
* @param type $cname
* @param type $cnumber
* @param type $email
* @param type $date
*/
function __construct($filename, $title, $desc, $image, $cname, $cnumber, $email, $date)
{
$this->id = $this->getId() + 1;
$this->title = $title;
$this->description = $desc;
$this->image = $image;
$this->contact_name = $cname;
$this->contact_number = $cnumber;
$this->email = $email;
$this->date = $date;
$this->file_name = $filename;
$this->phpArr = array($this->id => array(
'title' => $this->title,
'description' => $this->description,
'image' => $this->image,
'contact-name' => $this->contact_name,
'contact-number' => $this->contact_number,
'email' => $this->email,
'date' => $this->date
)
);
$this->jsonStr = json_encode($this->phpArr, JSON_UNESCAPED_UNICODE);
}
/**
* Append the new detail to the existing file.
*
* Method:
* 1) Load old file and convert to a PHP array
* 2) Append the new detail to the array
* 3) Convert back to JSON and write to the file
*
* @throws \InvalidArgumentException
*/
function write()
{
$ab = new ffile($this->file_name);
if (strlen($this->jsonStr) != 0) {
$oldJsonStr = $ab->get_data();
$oldArray = array(); // alway provide an array...
if (strlen($oldJsonStr) > 0) {
$oldArray = json_decode($oldJsonStr, true); // force array
}
if (is_array($oldArray)) { // valid array
$newCount = array_push($oldArray, $this->phpArr); // this does not return an array
$newJsonStr = json_encode($oldArray, JSON_UNESCAPED_UNICODE);
$ab->write($newJsonStr);
}
}
else {
throw new \InvalidArgumentException('file: '. $this->file_name .', Not a valid JSON array.');
}
}
}
// write one new record
$recNo = rand(100, 999);
$jso = new CreateEvent("aka.json", "ttile" .'-'. $recNo,
"description" .'-'. $recNo,
"image", "contactname", "contactnumber", "rfv@here.com", date('Y-m-d H:i:s'));
$jso->write();
// display file contents as PHP
$ffile = new ffile($jso->file_name);
$fileArray = json_decode($ffile->get_data(), true);
echo '<br /><pre>', PHP_EOL;
print_r($fileArray);
echo '</pre><br />', PHP_EOL;
/* clear file * / $ffile = new ffile($jso->file_name);
$ffile->file_clear(); /**/
Array
(
[0] => Array
(
[4] => Array
(
[title] => ttile-232
[description] => description-232
[image] => image
[contact-name] => contactname
[contact-number] => contactnumber
[email] => rfv@here.com
[date] => 2016-02-07 21:08:41
)
)
[1] => Array
(
[4] => Array
(
[title] => ttile-809
[description] => description-809
[image] => image
[contact-name] => contactname
[contact-number] => contactnumber
[email] => rfv@here.com
[date] => 2016-02-07 21:08:44
)
)
[2] => Array
(
[4] => Array
(
[title] => ttile-800
[description] => description-800
[image] => image
[contact-name] => contactname
[contact-number] => contactnumber
[email] => rfv@here.com
[date] => 2016-02-07 21:08:51
)
)
)