簡體   English   中英

如何使用 PHP 讀取/寫入 json 中的單個數組

[英]How can I read/ write to a single array in json with PHP

我有一個簡單的腳本,可以將數據存儲在 json 文件中。 每次保存表單時,它都會創建一個新數組。 我只想更新目標並在同一個數組中提出。

形式:

<form action="process.php" method="POST">
Goal:<br>
<input type="text" name="goal">
<br><br/>
Raised:<br>
<input type="text" name="raised">
<br><br>
<input type="submit" value="Submit">
</form>

過程.php

<?php

$myFile = "data.json";
$arr_data = array();

try
{      
    $formdata = array(
        'goal'=> $_POST['goal'],
        'raised'=> $_POST['raised']
    );

    $jsondata = file_get_contents($myFile);

    $arr_data = json_decode($jsondata, true);

    array_push($arr_data,$formdata);

    $jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);

    if(file_put_contents($myFile, $jsondata)) {
            echo 'Data successfully saved';
        }
    else 
            echo "error";

}
catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "\n";
}

?>
<?php

$formdata = array(
    'goal'=> $_POST['goal'],
    'raised'=> $_POST['raised']
);


try {

    $fp = fopen('data.json', 'w');
    fwrite($fp, json_encode($formdata));
    fclose($fp);

}
catch(\Exception $e) {
    // Caught Some Exception
}

您可以簡單地使用fopen()fwrite()打開和寫入文件。 數據將被新數據替換。

array_push附加。 您想替換現有的,而不是添加,對嗎? 所以:

<?php

$myFile = "data.json";

try {      
    $arr_data = json_decode(file_get_contents($myFile), true);

    // don't forget to validate first of course:
    $arr_data['goal'] = $_POST['goal'];
    $arr_data['raised'] = $_POST['raised'];

    $jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);

...

對於存檔,這個 file_put_contents 不會有太大幫助。

每當有人從表單中發布數據時,您必須以 append 模式(a)打開您的文件(data.json)。 然后使用fwritefopen編寫您的內容。

在這種情況下,您將獲得所有單個數據集作為一個單獨的數組。 不是一個數組

當你做$arr_data = json_decode($jsondata, true); , $arr_data成為一個關聯數組,這意味着你可以簡單地做$arr_data['goal'] = $_POST['goal']$arr_data['goal'] = $formdata['goal'] ,之后你可以重新編碼數組並將其保存到您的文件中。 因此,您只需將帶有array_push()調用的行切換到我剛剛解釋的代碼。 這適用於'goal''raised'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM