fwrite() 两次写入一个 json 编码的数组

我正在尝试使用通过获取请求收集的数据编写一个 json 文件。json文件是一个二维的字符串数组,但是当数据写入文件时,嵌套数组会被写入两次。


<?php

//used for parsing html

include("simple_html_dom.php");


//read the file 

$fp = fopen("j.json", "r");

$t = fread($fp, filesize("j.json"));

fclose($fp);

$loaded = json_decode($t);


//print the loaded array

print_r($loaded);


//gathering the data

$url = "https://www.soldionline.it/quotazioni/dettaglio/IT0003934657.html";

$prezzo1 = file_get_html($url)->find("span[class=val] b", 0)->plaintext;

$data = file_get_html($url)->find("span[class=ora] b", 0)->plaintext;


$url = "https://www.soldionline.it/quotazioni/dettaglio/IT0003934657.html";

$prezzo2 = file_get_html($url)->find("span[class=val] b", 0)->plaintext;


$url = "https://www.soldionline.it/quotazioni/dettaglio/IT0003934657.html";

$prezzo3 = file_get_html($url)->find("span[class=val] b", 0)->plaintext;


//adding the new data to the array

array_push($loaded, array($prezzo1, $prezzo2, $prezzo3, $data));

//the new json string is parsed and ready to be written

$s = json_encode($loaded);


//printing stuff to ensure the data is correct

echo "<br>".$s.", type=".gettype($s)."<br>";

print_r($loaded);


//write the new json string to the same file

$fp = fopen("j.json", "w");

fwrite($fp, $s);

fclose($fp);

?>

j.json 在脚本运行之前:


[]

脚本打印的内容:


Array ( )

[["128,54","128,54","128,54","30\/12"]], type=string

Array ( [0] => Array ( [0] => 128,54 [1] => 128,54 [2] => 128,54 [3] => 30/12 ) )

脚本后的 j.json:


[["128,54","128,54","128,54","30\/12"],["128,54","128,54","128,54","30\/12"]]

我尝试像这样打开文件:$fp = fopen("j.json", "r+");然后我更改了脚本:


$s = "\"".json_encode($loaded)."\"";


echo "<br>".$s.", type=".gettype($s)."<br>";

print_r($loaded);

fwrite($fp, $s);

fclose($fp);

我发现也写了一个空值:


[]"[["128,54","128,54","128,54","30\/12"]]""null"


LEATH
浏览 191回答 1
1回答

SMILET

浏览器在访问 url 时发送两个请求,一个对 php 文件的请求,另一个对/favicon.ico.&nbsp;发送第二个请求以检查站点是否具有图标。这第二个请求导致脚本执行两次。
打开App,查看更多内容
随时随地看视频慕课网APP