我制作了简单的文本编辑器,现在正在处理图像上传和图像管理器。我已经设置了管理器来读取包含所有图像的.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为数组
甚至提供了数组数据。怎么解决这个问题?
答案 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));