PHP使用unset之后數(shù)組轉(zhuǎn)化成對(duì)象

今天發(fā)現(xiàn)我同一個(gè)接口,用不同的賬號(hào)去請(qǐng)求的時(shí)候,會(huì)出現(xiàn)數(shù)據(jù)類(lèi)型不一樣的情況,導(dǎo)致前端js報(bào)錯(cuò)

  • 正常情況下,沒(méi)有使用走到unset的情況,請(qǐng)求接口數(shù)據(jù)返回是這樣的


    image.png
users:[{},{},{},{}....{}]

我們發(fā)現(xiàn)在users的類(lèi)型是數(shù)組,最外層用數(shù)組包裹著。


  • 使用另一個(gè)賬號(hào)登錄,請(qǐng)求同一個(gè)接口,這次有走進(jìn)代碼的unset,返回的數(shù)據(jù)突然就變成對(duì)象,也就是用{}包裹的


    image.png

    很明顯發(fā)現(xiàn)users是這樣一個(gè)格式,最外層使用的是{}包裹,而且仔細(xì)看,每個(gè){}里的元素有顯示他的下標(biāo),并且是不連貫的(通過(guò)unset函數(shù))

users:{0:{},1:{},3:{},.....8:{}}

這樣返回的數(shù)據(jù),很顯然在同一個(gè)頁(yè)面,前端是沒(méi)辦法處理的,所以報(bào)了這樣的錯(cuò)誤,前端也不知道什么原因


image.png

我到php調(diào)試代碼,發(fā)現(xiàn),只要有走進(jìn)unset的那一次請(qǐng)求,全部會(huì)出現(xiàn),users的從數(shù)據(jù)轉(zhuǎn)成對(duì)象的情況。
[{},{},{}] => {0:{},1:{},3:{}}
查了官方文檔才知道,php unset對(duì)json_encode() 的影響 ,因?yàn)槲以趓eturn 到前端的時(shí)候,還是用了laravel自帶的response()->json([])這個(gè)方法,也是相當(dāng)于json_encode()

解決辦法:
我使用 array_values() 函數(shù)重置了被unset操作過(guò)的數(shù)組下標(biāo),使它變成連貫的數(shù)組,這樣再json_encode
就不會(huì)出現(xiàn)數(shù)據(jù)類(lèi)型轉(zhuǎn)換的情況了
注:因?yàn)槲业膗sers數(shù)組里的下表都是索引下表,所以我使用這個(gè)函數(shù)對(duì)我的數(shù)據(jù)沒(méi)有影響

原因:json_encode() 對(duì)非連貫的數(shù)組,或者非索引下表的數(shù)組,轉(zhuǎn)化之后會(huì)變成{} 包裹的格式,因?yàn)槭褂昧藆nset,把原先索引下標(biāo)按順序的數(shù)組改變了,變成不連貫數(shù)組,所以會(huì)變成{}包裹的數(shù)據(jù)格式。
原因的參考文章鏈接:https://www.cnblogs.com/saysmy/p/9957734.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。