Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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 从json文件中删除_Php_Laravel - Fatal编程技术网

Php 从json文件中删除

Php 从json文件中删除,php,laravel,Php,Laravel,我有一个json文件,看起来像这样 { "product_1": { "category_1": "Category 1", "category_2": "Category 2" }, } 我试图做的是,当我删除一个类别时,我想从json文件中删除“key”:“value” 这是我的密码 pu

我有一个json文件,看起来像这样

    {
        "product_1": {
            "category_1": "Category 1",
            "category_2": "Category 2"
        },
    }
我试图做的是,当我删除一个类别时,我想从json文件中删除
“key”:“value”

这是我的密码

    public function deleteCategory($product, $category)
    {
        $storage = storage_path("/products.json");
        $file = file_get_contents($storage);
        $json = json_decode($file);

        unset($json->$product->$category);

        file_put_contents($storage, json_encode($json, JSON_PRETTY_PRINT));

        return (array)$json;
    }

当我删除一个类别时,它不会从json中删除它

我觉得奇怪的是,如果我这样做
dd(文件内容($storage,json\u encode($json,json\u PRETTY\u PRINT))
,那么它就可以工作了 但是如果我只有
文件内容($storage,json\u encode($json,json\u PRETTY\u PRINT))
那么它就不起作用了。所以我不知道在哪里
我错了。

考虑到$product和$category是键,请尝试以下操作:

public function deleteCategory($product, $category)
{
    $storage = storage_path("/products.json");
    $file = file_get_contents($storage);
    $json = json_decode($file, true);

    unset($json[$product][$category]);

    file_put_contents($storage, json_encode($json, JSON_PRETTY_PRINT));

    return (array)$json;
}

@TimLewis-
$product
$category
是我从
公共函数deleteCategory($product,$category)
传递给该函数的值,如果我执行
$json->product->category
可以添加
dd($product)
dd($category)
的输出吗?此代码
$json->$product->$category
在技术上有效,但仅当
$category
$product
不是对象时才有效。例如,
$product='property';未设置($json->$product),这与取消设置($json->property)
相同。你可能需要做一些像
unset($json->{$product->name}->{$category->name})
,等等@TimLewis-对于
$product
我得到
产品1
,对于
$category
我得到
类别1
,所以你实际上是在调用
unset($json->product\u 1->category\u 1)
,这应该是有效的。。。必须进行一些本地测试,看看有什么问题。编辑:我无法在
php artisan tinker
中本地重新创建此文件:。
dd($json)
显示了什么?这没有任何意义。。。
versionLabels
从哪里来?我试过了,但在我的开发工具中出现了这个错误
无法将stdClass类型的对象用作数组