亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 128
粉絲 9
評(píng)論 5
訪問量 290135
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
php輸出數(shù)組變成了對(duì)象?php數(shù)組轉(zhuǎn)化成json的數(shù)據(jù)格式不是數(shù)組套對(duì)象而是對(duì)象套對(duì)象
 一紙荒涼* Armani
原創(chuàng)
3856人瀏覽過

php輸出數(shù)組變成了對(duì)象?

php數(shù)組轉(zhuǎn)化成json的數(shù)據(jù)格式不是數(shù)組套對(duì)象而是對(duì)象套對(duì)象是怎么回事?
php為什么打印時(shí)是數(shù)組格式,但是轉(zhuǎn)json格式以后存入數(shù)據(jù)庫(kù)就成了對(duì)象形式?

問題如下:

  1. 如果是api返回給前端的json數(shù)據(jù),你需要保證的你的數(shù)組索引是連續(xù)的數(shù)字索引,需要使用array_values
  2. 如果是PHP關(guān)聯(lián)數(shù)組在JSON化時(shí)會(huì)出現(xiàn)數(shù)據(jù)類型變成對(duì)象的情況
  1. $arr = array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
  2. echo json_encode($arr);

輸出:{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}

此時(shí)數(shù)組格式的數(shù)據(jù)被轉(zhuǎn)換成了對(duì)象類型

如果是索引數(shù)組或者空數(shù)組,則輸出為數(shù)組形式。


另一種情況是雖然是索引數(shù)組,但依然有時(shí)候會(huì)被轉(zhuǎn)換成對(duì)象形式,這就邪門了,這是在菜單權(quán)限勾選時(shí)候踩的坑,如果我們連續(xù)勾選權(quán)限例如第一項(xiàng)第二項(xiàng)第三項(xiàng),但是如果跳過一下,這樣返回后臺(tái)接口的數(shù)據(jù),就是一個(gè)索引不連續(xù)的數(shù)組,這時(shí)候會(huì)被轉(zhuǎn)換成對(duì)象形式,然后在獲取的時(shí)候,造成了數(shù)據(jù)不統(tǒng)一從而報(bào)錯(cuò)。

所有后端需要給傳遞過來的數(shù)組sort重新排序一下或者只取出鍵或者值部分,這樣生成新的數(shù)組就是連續(xù)的鍵值對(duì)。json之后依然保持?jǐn)?shù)組的形態(tài)的字符串。

如果是api返回給前端的json數(shù)據(jù),你需要保證的你的數(shù)組索引是連續(xù)的數(shù)字索引,需要使用array_values。如果需要的內(nèi)容在鍵中也可以使用array_keys


下面來詳細(xì)介紹一下為什么會(huì)出現(xiàn)這種情況?

數(shù)組”(array)和“對(duì)象”(object)兩者都可以用來表示數(shù)據(jù)的集合

比如有一個(gè)數(shù)組a=[1,2,3,4],還有一個(gè)對(duì)象a={0:1,1:2,2:3,3:4},然后你運(yùn)行alert(a[1]),兩種情況下的運(yùn)行結(jié)果是相同的!這就是說,數(shù)據(jù)集合既可以用數(shù)組表示,也可以用對(duì)象表示,那么我到底該用哪一種呢?數(shù)組表示有序數(shù)據(jù)的集合,而對(duì)象表示無序數(shù)據(jù)的集合。如果數(shù)據(jù)的順序很重要,就用數(shù)組,否則就用對(duì)象。

當(dāng)然,數(shù)組和對(duì)象的另一個(gè)區(qū)別是,數(shù)組中的數(shù)據(jù)沒有“名稱”(name),對(duì)象中的數(shù)據(jù)有“名稱”(name)。但是問題是,很多編程語言中,都有一種叫做“關(guān)聯(lián)數(shù)組”(associative array)的東西。這種數(shù)組中的數(shù)據(jù)是有名稱的。

比如在JavaScript中,可以這樣定義一個(gè)對(duì)象:
var a={"城市":"北京","面積":16800,"人口":1600};

但是,也可以定義成一個(gè)關(guān)聯(lián)數(shù)組:

  1. a["城市"]="北京";
  2. a["面積"]=16800;
  3. a["人口"]=1600;

在Javascript語言中,關(guān)聯(lián)數(shù)組就是對(duì)象,對(duì)象就是關(guān)聯(lián)數(shù)組。這一點(diǎn)與PHP語言完全不同,在php中,關(guān)聯(lián)數(shù)組也是數(shù)組。
比如運(yùn)行下面這段javascript:

  1. var a=[1,2,3,4];
  2. a['foo']='Hello World';
  3. alert(a.length);

最后的結(jié)果是4,也就是說,數(shù)組a的元素個(gè)數(shù)是4個(gè)。
但是,運(yùn)行同樣內(nèi)容的php代碼就不一樣了:

  1. $a=array(1,2,3,4);
  2. $a["foo"]="Hello world";
  3. echo count($a);

最后的結(jié)果是5,也就是說,數(shù)組a的元素個(gè)數(shù)是5個(gè)。

所以在處理數(shù)據(jù)給前端的時(shí)候,多數(shù)情況會(huì)出現(xiàn)數(shù)組跟對(duì)象的集合體,如果前端對(duì)數(shù)據(jù)有要求,就得進(jìn)行相應(yīng)的修改。

總結(jié):如果我們就是準(zhǔn)備存儲(chǔ)可以說明性的鍵值對(duì)數(shù)據(jù),json轉(zhuǎn)換之后就是對(duì)象形式,但如果我們只是單存想存儲(chǔ)數(shù)組形式字符串,這要注意索引的順序是否連續(xù),因?yàn)閖son之后為了保持?jǐn)?shù)據(jù)的狀態(tài),他會(huì)給你數(shù)組轉(zhuǎn)換為json對(duì)象形式存儲(chǔ)。對(duì)象名稱是你的數(shù)組鍵,但是連續(xù)的索引的時(shí)候,無需保持這種狀態(tài),則JSON轉(zhuǎn)換之后為數(shù)組字符串。這一點(diǎn)需要注意,你最終想轉(zhuǎn)換為什么形式的JSON字符串好一致性處理。

本博文版權(quán)歸博主所有,轉(zhuǎn)載請(qǐng)注明地址!如有侵權(quán)、違法,請(qǐng)聯(lián)系admin@php.cn舉報(bào)處理!
全部評(píng)論 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守新聞評(píng)論服務(wù)協(xié)議
0條評(píng)論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)