如果字段与PHP匹配,则覆盖JSON

时间:2013-03-08 15:45:26

标签: php json file

我正在尝试写入json文件,并且希望能够在某些字段匹配时覆盖对象。现在,我的代码可以获取当前在JSON文件中的内容,但这只是将最新的对象添加到它的末尾。我需要做的是,如果消息字段匹配,那么我需要用新的条目替换该条目。知道我的意思吗?

感谢您的帮助!

PHP:

$file = file_get_contents('test.json');
$data = json_decode($file);
unset($file);//prevent memory leaks for large json.
//insert data here
$data[] = array("message" => $name, "latitude" => $lat, "longitude" => $lon, "it" => $it);
//save the file
file_put_contents('test.json',json_encode($data));
echo json_encode($data);
unset($data);//release memory

3 个答案:

答案 0 :(得分:0)

您可以使用array_filter查找具有匹配名称的元素并将其更新到位。但是,这不会删除任何现有的重复项。

$datum = array_filter($data, function (&$elem) use ($name, $lat, $lon, $it) {
    if ($elem['message'] === $name) {
       $elem = array('message' => $name /* snip */)
       return true;
    }
});
if (!$datum) { /* append array */ }

答案 1 :(得分:0)

假设我理解正确,您只需根据消息检查$data数组中的两个元素是否相等。最简单的方法是使用数据数组的键,然后重置它。所以类似于:

$file = file_get_contents('test.json');
$data = json_decode($file);
unset($file);//prevent memory leaks for large json.
//insert data here
$data[$message] = array("message" => $name, "latitude" => $lat, "longitude" => $lon, "it" => $it);

//save the file
$data = array_values($data);
file_put_contents('test.json',json_encode($data));
echo json_encode($data);
unset($data);//release memory

这会增加内存消耗,因此您可以使用md5()代替密钥以保持低位。

答案 2 :(得分:0)

如果使用json_decode($ string,true),您将获得关联或数字数组。可以使用标准的php数组方法操作此数组。

$array = json_decode($string, true);
if(md5($data['message']) != md5($newMessage)) {
    $array['message'] = $newMessage; 
}

我使用的是md5,因为我不知道消息的结构如何。