// 生成一個PHP數(shù)組
創(chuàng)新互聯(lián)是專業(yè)的江陰網(wǎng)站建設(shè)公司,江陰接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行江陰網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
$data = array();
$data['name'] = 'admin';
$data['pwd'] = '123456';
// 把PHP數(shù)組轉(zhuǎn)成JSON字符串
$json_string = json_encode($data);
// 寫入文件
file_put_contents('user.json', $json_string);
// 從文件中讀取數(shù)據(jù)到PHP變量
$json_string = file_get_contents('user.json');
// 把JSON字符串轉(zhuǎn)成PHP數(shù)組
$data = json_decode($json_string, true);
// 顯示出來看看
var_dump($data)
php中將數(shù)組格式換換為json格式可以使用 json_encode函數(shù)。
示例代碼如下:
?php
//定義數(shù)組
$arr=array('city'=array('北京','上海','廣州'),'order'=array(1,2,3));
//將數(shù)組轉(zhuǎn)換為json格式
var_dump(json_encode($arr))?;
?
json格式效果:
請輸入你的答案當(dāng)我們在結(jié)合php和javascript實現(xiàn)某些功能時,經(jīng)常會用到j(luò)son。json是js的一種數(shù)據(jù)格式,可以直接被js解析。而php無法直接讀取json數(shù)據(jù),但是php提供了json_decode函數(shù)來對json數(shù)據(jù)進(jìn)行轉(zhuǎn)化,從而可以被php腳本訪問。同時,php也提供了json_encode函數(shù)來將數(shù)據(jù)轉(zhuǎn)化成json格式。那么,js中的原生json與php中通過json_encode函數(shù)轉(zhuǎn)化后的json是否完全一樣呢?今天,站長就和大家一起來探討這個問題。我們通過php向javascript傳遞數(shù)組數(shù)據(jù)時,通常要將其轉(zhuǎn)化為json格式,一遍javascript來獲取,那么我們就以數(shù)組為例,先來看一下兩者之間的區(qū)別。1、一維數(shù)組考慮php數(shù)組$array=array("1","2","3");使用json_encode函數(shù)轉(zhuǎn)化后,對應(yīng)的json字符串為["1","2","3"]。細(xì)心的朋友很快就發(fā)現(xiàn),轉(zhuǎn)化后得到的json字符串,就是javascript中的數(shù)組形式,那么是否可以用js的數(shù)組訪問方式來訪問呢?當(dāng)然是可以的,但是你將這個json字符串傳遞給給js時,需要使用urlencode函數(shù)對其編碼,如:')"id="aj"訪問json我們可以用下面的js代碼來驗證:functionshow(str){varjobj=eval_r(decodeURI(str));alert(jobj[2]);}大家自己試一試就會發(fā)現(xiàn),是的,可以用js中訪問一維數(shù)組的方式來訪問它。eval方法將json字符串解釋為json對象,因為傳遞過來的是字符串,不轉(zhuǎn)化的話,你得到將是字符串中第三個字符的值。我們再來對這個一維數(shù)組做一下變化,我們發(fā)現(xiàn)上面的一維數(shù)組沒有指定索引,所以它默認(rèn)為數(shù)字索引,現(xiàn)在我們來給它加上鍵名:考慮php數(shù)組$array=array('a'='1','b'='2','c'='3');使用json_encode函數(shù)轉(zhuǎn)化后,對應(yīng)的json字符串為{"a":"1","b":"2","c":"3"}。我們很快就發(fā)現(xiàn)了其中的不同,最明顯的就是字符串兩端的[]變成了{(lán)},那么這個字符串是否也可以按上面那樣處理后被js訪問呢?我們不防試一試:'1','b'='2','c'='3')));?')"id="aj"訪問jsonfunctionshow(str){varjobj=eval_r(decodeURI(str));alert(jobj.a);}大家如果動手試了就知道,點擊鏈接后,沒有出現(xiàn)彈窗。為什么呢?是PHP生成的json字符串格式不對嗎?不是的,這是我們在使用eval函數(shù)解釋的時候,出錯了。把上面的函數(shù)代碼換成:functionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj.a);}再試試吧!怎么樣,可以訪問了吧。這告訴我們,在使用eval方法處理帶有鍵名的json字符串時,需要在字符串兩端加速括號。至于為什么,站長也不知道,站在巨人的肩膀上而已。這里要注意,盡管PHP生成的json字符串{"a":"1","b":"2","c":"3"}被傳遞給js后無法被直接解釋為json格式,但是如果你在js中使用該字符串直接創(chuàng)建json數(shù)據(jù),是可以的。試試下面的代碼吧:varjobj={"a":"1","b":"2","c":"3"};alert(jobj.b);2、二維數(shù)組二維數(shù)組在PHP用的應(yīng)用非常廣泛,因此了解二維數(shù)組轉(zhuǎn)化后的json格式非常重要。有了上面的例子做鋪墊,下面站長就直接給出示例代碼:')"id="aj"訪問jsonfunctionshow(str){varjobj=eval_r(decodeURI(str));alert(jobj[0][0]);}大家運行,會發(fā)現(xiàn),這跟一維數(shù)組差不多,這是不帶鍵名的例子,因此在show函數(shù)中,去掉字符串兩端的括號也是可以的。下面,我們對二維數(shù)組進(jìn)行一下變化,在第二維中加入鍵名,請看示例代碼:'1',"b"='2','3'))));?')"id="aj"訪問jsonfunctionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj[0].a);}大家運行代碼后,發(fā)現(xiàn),這里我們訪問json數(shù)據(jù)的方式有點不一樣。上面我們用的是alert(jobj[0][0]);而這里我們用的是alert(jobj[0].a);不要問我為什么,就是這樣。這就是json的訪問方式。上面的例子,我們對二維數(shù)組的第二維添加了鍵名,下面我們對第一維添加鍵名,看看訪問方式又有什么不同:array('1','2','3'))));?')"id="aj"訪問jsonfunctionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj.k[1]);}這里我們使用的是jobj.k[1]這樣的方式,大家一定已經(jīng)發(fā)現(xiàn)了,只要數(shù)組中含有鍵名,當(dāng)數(shù)組被轉(zhuǎn)化為json格式后,就要使用json對象.鍵名這樣的方式來訪問該鍵下的元素,上面的例子中,k鍵下的數(shù)組元素是數(shù)字索引,所以在json中使用k[1]這樣的方式來訪問。下面,我們對數(shù)組的第一維和第二維都添加鍵名:array("a"='1','2','3'))));?')"id="aj"訪問jsonfunctionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj.k.a);}正如上面所提到的,只要含有鍵名,就必須以json對象.鍵名的方式來訪問,如果有多個鍵就要用json對象.鍵名.鍵名,不要問我為什么,這就是json的訪問方式,只有javascript的發(fā)明者能向你解釋,他為什么要這樣規(guī)定。結(jié)論:1、將php中的數(shù)組轉(zhuǎn)化為json字符串傳遞給js時。如果數(shù)組沒有指定鍵名,那么可以直接使用js的eval方法將其轉(zhuǎn)化為json格式供js處理;如果數(shù)組中含有鍵名,那么在使用eval方法處理時,需要使用()將json字符串括起來。2、如果數(shù)組中含有鍵名,轉(zhuǎn)化為json字符串后,在js中要用json對象.鍵名.鍵名的方式來訪問,如果是數(shù)字索引則用json對象[1]或者json對象.鍵名[1]這樣的方式。上面,我們主要討論了,在PHP向js傳遞json字符串時,需要注意的事項。下面我們再來討論,用js向php傳遞json字符串時需要如何處理。聰明的你肯定已經(jīng)知道了,只要將json數(shù)據(jù)用引號引起來作為字符串傳遞給PHP【通常用ajax進(jìn)行】就可以用json_decode函數(shù)解碼了。沒錯!就是這樣!但是在構(gòu)造json字符串的時候一定要仔細(xì),如果你不經(jīng)常構(gòu)造json字符串,那么不妨用echojson_encode(array('k'=array("a"='1','2','3')))這樣的方式,查看你需要構(gòu)造的目標(biāo)字符串的json格式。這樣你就可以在js中根據(jù)你想要的結(jié)果來構(gòu)造了!好了,今天對php和js之間如何使用json數(shù)據(jù)進(jìn)行通信就討論到這里,大家可以自己再試試將php的對象類型進(jìn)行json編碼后如何傳遞給js。
PHP直接的函數(shù)獲取或生成
用php生成json格式:json_encode('內(nèi)容');
用php讀取json數(shù)據(jù):json_deconde('json數(shù)據(jù)');
分享文章:php生成json數(shù)據(jù) php輸出json格式
標(biāo)題來源:http://jinyejixie.com/article20/dddhgco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站排名、微信公眾號、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)