2012-01-28 48 views
0

我有這個JavaScript函數,它將一個JavaScript數組轉換爲一個序列化的字符串,以便在PHP中作爲數組使用。Javascript數組序列化函數在PHP中使用

function js_array_serialize(a) { 
    var a_php = ""; 
    var total = 0; 
    for (var key in a) { 
    ++ total; 
    a_php = a_php + "s:" + 
     String(key).length + ":\"" + String(key) + "\";s:" + 
     String(a[key]).length + ":\"" + String(a[key]) + "\";"; 
    } 
    a_php = "a:" + total + ":{" + a_php + "}"; 
    return a_php; 
} 

上面的函數完成關聯數組的工作。但我有一個多維數組,並且必須在for循環中完成某些操作,我可以考慮其他嵌套循環。

我的JavaScript陣列是這樣的結構的:

var a = { 
    'index': { 
    'subindex1': 'default', 
    'subindex2': 'default' 
    }, 
    'index2': { 
    'subindex1': 'default', 
    'subindex2': 'default' 
    } 
}; 

任何幫助理解。 謝謝!

+2

您是否嘗試將數組轉換爲JSON,這樣PHP和javascript都可以輕鬆使用它。 – 2012-01-28 16:03:43

+0

這可以通過PHP,我只需要通過客戶端做到這一點,而無需使用ajax或PHP來生成序列化的字符串。 – user558134 2012-01-28 16:10:32

回答

1

您似乎在重塑JSON輪。這個怎麼樣:

function js_array_serialize(a) { 
    return JSON.stringify(a); 
} 

JSON.stringify功能是本地內置的現代瀏覽器。如果您想支持傳統瀏覽器,只需將json2.js腳本包含在您的頁面中即可。

切勿使用字符串連接來構建JSON。還有更多的情況需要處理:正確地轉義值。想想例如,如果該值包含引號?它會打破你的序列化算法。

+0

現在將是一個很好的時間指向一個關於[數據交換格式](http://en.wikipedia.org/wiki/Data_exchange)的文章 – JonnyReeves 2012-01-28 16:06:59

+0

但是,這不會將字符串序列化爲PHP函數serialize($一個)。 – user558134 2012-01-28 16:14:18

+0

@ user558134,你可以在PHP中使用json_encode和json_decode。 – 2012-01-28 16:16:14