将目录中的所有文件写入json

时间:2016-08-03 11:31:50

标签: php json

我制作了简单的文本编辑器,现在正在处理图像上传和图像管理器。我已经设置了管理器来读取包含所有图像的.json文件,它可以正常工作。问题是php脚本实际上将新添加的图像写入该json。

$file = "images.json";
$arr_data = array();

foreach(glob('/uploads/*') as $image) {
    $arr_data = array(
        'link' => $image,
        'tag' => 'images',
    );
}

$jsondata = file_get_contents($file);
$arr_data = json_decode($jsondata, true);

array_push($arr_data,$jsondata);

$jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);
file_put_contents($file, $jsondata));

我正在

  

警告:array_push()期望参数1为数组

甚至提供了数组数据。怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您从一个空文件开始,即images.json,那么您第一次运行这两行

$jsondata = file_get_contents($file);
$arr_data = json_decode($jsondata, true);

第二行可能会将$arr_data更改为布尔值。由于json_decode()无法将nothing转换为数组。

因此,添加此项以初始化文件以供使用

<?php
$file = "images.json";
file_put_contents($file, '[]');  // init the file

你也在重用$arr_data变量,所以也要修改它,你也要覆盖新数组

$file = "images.json";
file_put_contents($file, '[]');  // init the file

$arr_data = array();

foreach(glob('/uploads/*') as $image) { 
    // amended to not reuse $arr_data 
    // ameded to not overwrite the array as you build it
    $new_arr[] = array( 'link' => $image, 'tag' => 'images');
}

$jsondata = file_get_contents($file);
$arr_data = json_decode($jsondata, true);

array_push($arr_data,$new_arr);

$jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);
file_put_contents($file, $jsondata));