php - 使用 PHP 修改 json 不保存/更新

标签 php json

我正在尝试使用 php.ini 修改 json 文件中的数据。我正在使用的代码如下。它能够成功准备好文件内容,并且在 foreach 循环中它将在 if 语句中回显。

这太棒了,if 语句现在已被硬编码以供测试。我想做的是修改各种属性并将其写回到文件中。这似乎不起作用。当我加载页面,然后刷新以查看是否设置了新值时,它只是不断回显相同的值。我在本地下载了 .json,但没有任何变化。

对我做错了什么有什么想法吗?

//Get file, decode
$filename = '../json/hartford.json';
$jsonString = file_get_contents($filename);
$data = json_decode($jsonString, true);

foreach ($data['features'] as $key => $segment) {

    if ($segment['properties']['UID'] == '25301') {

//echo out properties for testing
        echo("KEY: ".$key."<br/>");
        echo("UID: ".$segment['properties']['UID']."<br/>");
        echo("Full Name: ".$segment['properties']['FULLNAME']."<br/>");
        echo("FCC: ".$segment['properties']['FCC']."<br/>");
        echo("Render CL: ".$segment['properties']['RENDER_CL']."<br/>");
        echo("<hr/>");

 //set property to new value.... NOT WORKING?
        $segment['properties']['RENDER_CL'] = 111;
    }
}

//Test if file is writable to be sure
$writable = ( is_writable($filename) ) ? TRUE : chmod($filename, 0755);

if ( $writable ) {
    $newJsonString = json_encode($data);
    if (file_put_contents($filename, $newJsonString)) {
        echo('Put File Content success');
    } else {
        echo('NOT put');
    }
} else {
    echo 'not writeable';
}

最后它会回显“放置文件内容成功”,这似乎表明它已成功,但事实并非如此......感谢您的任何建议。

最佳答案

您需要了解foreach循环的工作原理。问题是,您获得的值 ($segment) 是源数组中真实值的副本。因此,当您分配给它时 ($segment['properties']['RENDER_CL'] = 111;),您并没有真正更改源数组。您只需更改一些在循环结束时超出范围的局部变量。

有多种方法可以解决此问题。其中之一是在值变量之前添加 &:

foreach ($data['features'] as $key => &$segment)

这告诉它使用数组项的引用,而不是复制其值。

关于php - 使用 PHP 修改 json 不保存/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48208922/

相关文章:

c# - JSON.net反序列化返回空对象

php - 具有 500,000 条记录的慢速 MYSQL 查询

php - 交响乐 : secure delete link with CSRFProtection

json - 如何在 Serde 中(反)序列化强类型的 JSON 字典?

javascript - GWT 的 JSONParser 生成错误的数字值

jquery - jquery中解析对象时Json解析错误?

c# - 嵌套 JObject 被序列化为空数组

php - 针对 mysql 触发器进行计算

php - 如何使用 iframe 在模态窗口中显示内容?

php - 如何使用mysql和php计算列值的总和?