JSON用法之將PHP數組轉JS數組,JS如何接收PHP數組_php執行個體

來源:互聯網
上載者:User

首先下載下面這個檔案(這是一段是別人寫出來專門解析json的代碼),然後引入這個檔案!

    http://pan.baidu.com/s/1dD8qVr7

    現在當我們需要用ajax與後台進行互動時,怎樣將php的數組傳送到js檔案並且並js所識別?

    先看php檔案,當我們擷取到$arr這個數組後

foreach ($arr as $value) {  $json .= json_encode($value) . ',';} echo '[' . substr($json,0,strlen($json) - 1) . ']';

json_encode()是將$arr的每一個值進行json編碼,然後我們想輸出一個json的數組,所以我們將每個編譯後的值後面加一個逗號並且最後在所有值外面加上'[]',這是json數組的格式,注意因為我們在將每一個值進行json編碼後都加上一個逗號在後面,這樣就導致最後所有值合并數組時多一個逗號,所有我們得用substr()函數將其最後一個逗號去掉!

    然後我們來看js檔案

當我們用arr接受到php檔案傳輸的json數組後

var json = JSON.parse(arr);

JSON是咱們開始下載那個檔案中定義的一個對象,我們用它的parse方法將json數組轉化成js的數組!這是變數json接受到的是一個js數組所以直接不能列印出來,你可以遍曆這個json數組或者json[0]來輸出!

其實,說白了咱們將php數組轉化成js數組的思路就是利用json這個中間量來實現!當然你也可以只用php和js來實現數組的轉化,方法不止一種!

PHP數組和Json之間的轉換

之所以要用到Json,很多時候是因為使用ajax對象時,程式與JS函數之間的資料互動。因為JS不認識PHP中的數組,PHP也不認識JS中的數組或對象。Json很好的解決了這個問題。

Json簡介

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於JavaScript的一個子集,這意味著JavaScript可以直接讀取Json,非常方便。

Json的具體形式是:

1.對象

對象是一個無序的“‘名稱/值'對”集合。一個對象以“{”(左括弧)開始,“}”(右括弧)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值' 對”之間使用“,”(逗號)分隔。

例如: {“username”: “Eric”,”age”:23,”sex”: “man”}

程式碼範例:

<script type="text/javascript">  function getUser(){  var  user = {  "username": "Eric",  "age":23,  "family": {"mother":"Marry","father":"Alon","brother":"Tom"}  };  alert( user.username );  alert( user.age );  alert(user.family.brother);}  getUser();  </script>

2、數組

數組是值(value)的有序集合。一個數組以“[”(左中括弧)開始,“]”(右中括弧)結束。值之間使用“,”(逗號)分隔。

例如: ["Eric",23, "man"]

程式碼範例:

<script type="text/javascript">  function getArray() {  var arr = ["Jarry",23, ["www.xiaophper.com","wxyh_999@126.com"]];  alert(arr[0]);  alert(arr[1]);  alert(arr[2][0]); alert(arr[2][1]);  }  getArray();  </script>

注意:對象和數組兩種形式在JS中的調用時不一樣啊,對象用“.”調用,數組用下標[0]、[1]調用。還要注意在傳遞Json串時string類型的值要用引號括起來。

PHP中將數組轉變成Json

強大的PHP已經提供了內建函數:json_encode() 和 json_decode()。很容易理解,json_encode()就是將PHP數群組轉換成Json。相反,json_decode()就是將Json轉換成PHP數組。

例如:

$array = array("name" => "Eric","age" => 23); echo json_encode($array);

程式將列印出 :

複製代碼 代碼如下:

{“name”:”Eric”,”age”:23}

再看下面的例子:

$array = array(0 => "Eric", 1 => 23); echo json_encode($array);

程式將列印出 :["Eric",23]

以上兩個例子可以看出,如果PHP數組的鍵都是數字,那麼json_encode()返回一個數組形式的Json,如果PHP數組的鍵全是字串。那麼json_encode()就會返回一個對象形式的Json。剛已經說過。兩者在js中的調用是不同的。

事實上,只要在PHP數組的鍵中有一個字串形式的鍵,那麼json_encode()就會返回對象形式的Json。這是不正確的。因為,雖然在PHP代碼中不會出現錯誤,但要是將這樣的Json傳給JS函數,JS會將此Json當做一個對象,而對象是不可能以數字作為屬性名稱的。也就是說JS 不知道這是什麼 : user.0.username  (中間是數字零)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.