欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

json擴展包消除循環(huán)引用

李佳璐1年前8瀏覽0評論

在PHP開發(fā)中,使用json進行數(shù)據(jù)傳輸和存儲是非常常見的。但是在一些特殊情況下,會出現(xiàn)循環(huán)引用的情況,這會導(dǎo)致json編碼出現(xiàn)問題。例如:

$parent = ["name" => "parent"];
$child = ["name" => "child", "parent" => &$parent];
$parent["child"] = $child;
echo json_encode($parent);

輸出結(jié)果為:

PHP Fatal error:  Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes)

這是因為$parent和$child相互引用,造成死循環(huán),導(dǎo)致內(nèi)存溢出。

為解決這個問題,可以使用PHP的json擴展包提供的特性,進行消除循環(huán)引用的處理。例如:

$parent = ["name" => "parent"];
$child = ["name" => "child"];
$child["parent"] = &$parent;
$parent["child"] = &$child;
echo json_encode($parent, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_PARTIAL_OUTPUT_ON_ERROR);

輸出結(jié)果為:

{
"name": "parent",
"child": {
"name": "child"
}
}

在json_encode函數(shù)中,使用了以下特性:

  • JSON_UNESCAPED_UNICODE:不進行Unicode轉(zhuǎn)義,這樣輸出的結(jié)果更易讀。
  • JSON_UNESCAPED_SLASHES:不進行斜杠轉(zhuǎn)義。
  • JSON_PRETTY_PRINT:對數(shù)組進行格式化,輸出的結(jié)果更易讀。
  • JSON_PARTIAL_OUTPUT_ON_ERROR:在編碼過程中如果發(fā)生錯誤,只輸出已經(jīng)編碼的部分數(shù)據(jù),而不是直接拋出異常。

當(dāng)然,還有其他的方式解決循環(huán)引用問題,例如使用引用計數(shù),但是這種方式需要自己實現(xiàn)相關(guān)功能,比較麻煩。而使用json擴展包提供的特性,可以輕松解決問題。