2012-01-28 45 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