我想要一些PHP代码,使用PHP从JSON文件中删除内容,例如:
假设我有这个JSON文件:
{
"aaa": [
{
"title": "xx",
"description": "6",
},
{
"title": "tt",
"description": "b",
}
]
}
因此,我希望它通过POST获取字符串,然后删除具有通过POST给出的字符串的JSON的整个部分。
例如,假设我通过POST请求发送“ xx”,PHP脚本运行后,我希望JSON看起来像这样,而没有被删除:
{
"aaa": [
{
"title": "tt",
"description": "b",
}
]
}
我通过搜索互联网以各种方式进行尝试,但我无法做任何正确的事情。预先感谢!
我知道有很多类似的问题和答案,但对我来说它们都不适用,所以我问自己,不需要假装将其标记为重复的,如果您知道该怎么做,在这里回答,否则...
答案 0 :(得分:0)
您想做的是...
file_get_contents()
和json_decode()
将JSON文件解析为PHP数据结构aaa
数组,使用array_filter()
删除与POST数据匹配的条目json_encode()
和file_put_contents()
将修改后的数据结构作为JSON字符串写回到文件中这是一个例子
$file = 'path/to/file.json';
$data = json_decode(file_get_contents($file));
$title = trim($_POST['title']); // assuming this is all checked / validated / etc
$data->aaa = array_values(array_filter($data->aaa, function($item) use ($title) {
return (bool) strcmp($item->title, $title); // returns 0 if strings match
}));
file_put_contents($file, json_encode($data));
答案 1 :(得分:0)
我知道您有一个可以接受的答案,但是使用这样一个简单的json对象,您可以简单地创建一个新对象,并添加aaa数组,其中的元素与您要删除的元素不匹配。
<?php
$file = '/path/to/your/file';
// Delete this one
$_POST['delete'] = 'xx';
// Get file contents and decode it
$str = file_get_contents( $file );
$json = json_decode( $str );
// Create a new object
$temp = new stdClass;
// Add only the objects we want to keep
foreach( $json->aaa as $obj )
if( $obj->title != $_POST['delete'] )
$temp->aaa[] = $obj;
// Replace the file contents
file_put_contents(
$file,
json_encode( $temp )
);