PHPフォームを使用してJSONファイルを更新しようとしていますが、ファイルのフィールドを編集するとエントリの複製が作成されます。たとえば、次のようにPHPを使用してJSONファイルを更新すると、重複したエントリが発生する
[
{"toolName":"tool1", "url":"https://google.com/", "phase":"None"},
{"toolName":"tool2", "url":"http://yahoo.com/", "phase":"None"},
{"toolName":"tool3", "url":"http://bing.com/", "phase":"None"}
]
PHPのフォームは「TOOL1」の「フェーズ」を変更したい提出の場合は、アップデートで新しいエントリを追加します。いいね:
[
{"toolName":"tool1", "url":"https://google.com/", "phase":"None"},
{"toolName":"tool2", "url":"http://yahoo.com/", "phase":"None"},
{"toolName":"tool3", "url":"http://bing.com/", "phase":"None"},
{"toolName":"tool1", "url":"https://google.com/", "phase":"NewPhase"}
]
これをどう回避できますか?私は更新識別子として、アレイ内のツールのインデックスを使用していますので、私の現在のソリューションはこれです:
$toolId = $_POST['tool-id'];
$toolName = $_POST['tool-name'];
$toolUrl = $_POST['tool-url'];
$toolPhase = $_POST['tool-phase'];
$data = file_get_contents("../assets/js/tools.json");
$json_data = json_decode($data, true);
$json_data[$toolId]->toolName = $toolName;
$json_data[$toolId]->url = $toolUrl;
$json_data[$toolId]->phase = $toolPhase;
$json_data = array_values($json_data);
file_put_contents("../assets/js/tools.json", stripslashes(json_encode($json_data)));
**注:フォームを送信すると、私は、ブートストラップモーダルを使用しているので、私しています表示されている現在のツール(つまり、インデックスのtoolId)のデータを送信するだけなので、JSONファイル全体を反復処理しません。
'$ toolId'をキーとして連想配列として格納する必要があります。 'array_values($ json_data)'を実行すると、キーが失われます。 – Barmar
'$ _POST ['tool-id']'は 'tool1'のインデックスである' 0'を含んでいなければなりません。 – apokryfos
jsonでエンコードされた値に 'stripslashes'もしないでください。 'json_encode'は、有効なjsonを生成する方法を知っていて、スラッシュを破ると破損する可能性があります。 – apokryfos