0

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
4

3 に答える 3

0

json_decode($string, true) を使用すると、連想配列または数値配列のいずれかが取得されます。この配列は、標準の PHP 配列メソッドで操作できます。

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

メッセージの構造がわからないため、md5 を使用しました。

于 2013-03-08T16:15:32.843 に答える
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 */ }
于 2013-03-08T15:54:56.090 に答える
0

私が正しく理解していると仮定する$dataと、メッセージに基づいて、配列内の 2 つの要素が等しいかどうかを確認するだけで済みます。これを行う最も簡単な方法は、データ配列のキーを使用し、後でリセットすることです。次のようなもの:

$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()ため、代わりにキーに使用してメモリを低く抑えることができます。

于 2013-03-08T15:55:18.433 に答える