file_get_contents被fopen写入模式覆盖

function json_file_append($array, $file)
{
    $fo = file_get_contents($file);
    $ar = json_decode($fo, true);
    if (!is_array($ar)) {
        $ar = $array;
    } else {
        $ar = array_unique(array_merge($ar, $array));
    }

    fwrite(fopen($file, 'w+'), json_encode($ar, JSON_PRETTY_PRINT));
}

what i'm trying to do is pull an existing array from a json file using json_decode, append to that array, then rewrite it to the json file. this is essentially trying to avoid saving everything to one big array and then writing it all at the end of the loop so if I need to cancel the loop, data won't be lost from the parts of the array i've already gone through


my problem is that for some reason it's only writing the most recent element of the array, like doing the write-mode on fopen is causing file_get_contents to be overwritten.

file_put_contents does exist, and I see no reason not to use it. You are not dealing with any concurrency issues, don't do any locking, or anything else that requires fopen or fwrite.