未设置数组变为二维后

时间:2019-09-05 14:57:24

标签: php arrays json

我有以下config.json文件。

{
    "version": "9",
    "sysctl": {
        "item": [
            {
                "tunable": "net.link.bridge.pfil_bridge",
                "value": "1",
                "descr": "Packet filter on the bridge interface"
            },
            {
                "tunable": "dev.netmap.generic_ringsize",
                "value": "4096",
                "descr": ""
            },
            {
                "tunable": "net.link.bridge.pfil_member",
                "value": "1",
                "descr": ""
            },
            {
                "tunable": "net.link.bridge.pfil_bridge",
                "value": "0",
                "descr": ""
            }
        ]
    }
}

如果使用下面的PHP代码在其中某些设置不正确,我会更改它。

$filename='config.json';
$data=file_get_contents($filename);
$data = json_decode($data,true);
$generic_ringsize_found = 0;
$pfil_bridge_found = 0;
$pfil_member_found = 0;
foreach ($data['sysctl']['item'] as $key => $value) {
    if ($value['tunable'] == 'dev.netmap.generic_ringsize') {
        if ($value['value'] == '4096') {
            $generic_ringsize_found = 1;
        }
        else{
            unset($data['sysctl']['item'][$key]);
        }
    }
    if ($value['tunable'] == 'net.link.bridge.pfil_bridge') {
        if ($value['value'] == '0') {
            $pfil_bridge_found = 1;
        }
        else{
            unset($data['sysctl']['item'][$key]);
        }
    }
    if ($value['tunable'] == 'net.link.bridge.pfil_member') {
        if ($value['value'] == '1') {
            $pfil_member_found = 1;
        }
        else{
            unset($data['sysctl']['item'][$key]);
        }
    }
}
if ($generic_ringsize_found == 0) {
    array_push($data['sysctl']['item'],array('tunable'=>'dev.netmap.generic_ringsize','value'=>'4096','descr'=>''));
}
if ($pfil_bridge_found == 0) {
    array_push($data['sysctl']['item'],array('tunable'=>'net.link.bridge.pfil_bridge','value'=>'0','descr'=>''));
}
if ($pfil_member_found == 0) {
    array_push($data['sysctl']['item'],array('tunable'=>'net.link.bridge.pfil_member','value'=>'1','descr'=>''));
}
$data = json_encode($data, JSON_PRETTY_PRINT);
$fp = fopen($filename, 'w');
fwrite($fp, $data);
fclose($fp);

然后它将密钥添加到项目并设置config.json文件。

{
    "version": "9",
    "sysctl": {
        "item": {
            "1": {
                "tunable": "dev.netmap.generic_ringsize",
                "value": "4096",
                "descr": ""
            },
            "2": {
                "tunable": "net.link.bridge.pfil_member",
                "value": "1",
                "descr": ""
            },
            "3": {
                "tunable": "net.link.bridge.pfil_bridge",
                "value": "0",
                "descr": ""
            }
        }
    }
}

但是我想拥有config.json文件

{
    "version": "9",
    "sysctl": {
        "item": [
            {
                "tunable": "dev.netmap.generic_ringsize",
                "value": "4096",
                "descr": ""
            },
            {
                "tunable": "net.link.bridge.pfil_member",
                "value": "1",
                "descr": ""
            },
            {
                "tunable": "net.link.bridge.pfil_bridge",
                "value": "0",
                "descr": ""
            }
        ]
    }
}

我尝试了很多事情(JSON_FORCE_OBJECT,作为对象解码),但没有成功。帮我。预先感谢。

0 个答案:

没有答案