Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和POST请求删除JSON数据_Php_Json - Fatal编程技术网

使用PHP和POST请求删除JSON数据

使用PHP和POST请求删除JSON数据,php,json,Php,Json,我想要一些使用PHP从JSON文件中删除内容的PHP代码,例如: 假设我有一个JSON文件: {      "aaa": [          {              "title": "xx",              "description": "6",          },          {              "title": "tt",              "description": "b",          }      ] } 所以我希望它通过PO

我想要一些使用PHP从JSON文件中删除内容的PHP代码,例如:

假设我有一个JSON文件:

{
     "aaa": [
         {
             "title": "xx",
             "description": "6",
         },
         {
             "title": "tt",
             "description": "b",
         }
     ]
}
所以我希望它通过POST获取字符串,然后删除JSON的整个部分,其中包含通过POST给出的字符串

例如,假设我通过POST请求发送“xx”,在PHP脚本运行后,我希望JSON看起来像这样,没有被删除的JSON:

{
     "aaa": [
         {
             "title": "tt",
             "description": "b",
         }
     ]
}
我尝试了通过搜索互联网找到的每一种方法,但我无法做任何正确的事情。提前谢谢


我知道有很多这样的问题和答案,但没有一个对我有用,所以我自己问,不需要任何人将此标记为重复,如果你知道如何做,请在这里回答,否则…

你想做的是

  • 使用
    file\u get\u contents()
    JSON\u decode()
  • 按标题过滤
    aaa
    数组,使用
    array\u Filter()
  • 使用
    JSON\u encode()
    file\u put\u contents()
  • 这里有一个例子

    $file='path/to/file.json';
    $data=json_解码(文件获取内容($file));
    $title=trim($_POST['title']);//假设这些都已检查/验证/等等
    $data->aaa=数组\值(数组\过滤器($data->aaa,函数($item)使用($title){
    return(bool)strcmp($item->title,$title);//如果字符串匹配,则返回0
    }));
    file_put_contents($file,json_encode($data));
    

    Demo ~

    我知道您有一个公认的答案,但是使用这样一个简单的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 ) 
    );
    

    请您链接到其他问题/答案,并解释它们是如何没有帮助的?这将在将来节省时间。另外,请显示您已尝试的内容。您实际上只是希望通过每个对象的
    title
    属性筛选数组。这应该会有帮助,如果没有,请解释~@luclzzBR2252我刚刚添加了
    array\u值
    来重新索引过滤后的数组。否则,你会得到一个带有数字键的对象,这就是我想要做的,但我不知道如何解释