不更新json文件上的数据,但我的代码通过PHP是正确的

时间:2017-03-11 14:29:09

标签: php json web

我是新手,所以请一起来。我很确定我的代码和语法是正确的。

这是我的json文件

{"data":
    [
        {"label":"Signed-in Client","value":2
        }
    ]
}

这是我的php代码

<?php


    $conn=mysqli_connect("localhost", "root","","something");
    $res1 = mysqli_query($conn, "SELECT * FROM tbl_pet_owner ORDER BY pet_owner_id");
    $max1 = mysqli_num_rows($res1);

    $jsonString = file_get_contents('data.json');
    $data1 = json_decode($jsonString, true);
    foreach ($data1['data'] as $key ) 
    {
    if ($key[0]['label'] == "Signed-in Client") 
        {
            $data1['value'] = $max1;
        }
    }
    $newJsonString = json_encode($data1);
    file_put_contents('data.json', $newJsonString);
?>

但是当我刷新时,它不会使用我的查询的最大计数进行更新。我希望你能帮助我。这是我的论文

1 个答案:

答案 0 :(得分:1)

在我看来,问题与您遍历数据的方式有关。

例如,在foreach ($data1['data'] as $key )中,$key已经是一个关联数组(例如,array("label" => "Signed-in Client", "value" => 2)),因此我应该只使用$key[0]['label']代替$key['label']而不是'value'

此外,当您要修改$data1时,必须访问相同的关联数组,而不是原始变量$data1['data']

实现这一目标的一种方法如下所示。在该示例中,使用引用(&$key)遍历数组foreach。请注意,应该在<?php $max1 = 100;//just an example $jsonString = file_get_contents('data.json'); $data1 = json_decode($jsonString, true); foreach ($data1['data'] as &$key ) { print_r($key); if($key['label'] == "Signed-in Client") { $key['value'] = $max1; } } unset($key); print_r($data1); /* gives: Array ( [data] => Array ( [0] => Array ( [label] => Signed-in Client [value] => 100 ) ) ) */ //$newJsonString = json_encode($data1); //file_put_contents('data.json', $newJsonString); ?> 块之后取消设置此变量,以断开与正在遍历的数组的最后一个元素的关联。

{{1}}