我的网站在js文件中有很多javascript,我们的前端设计器嵌入设置代码为json格式。我需要这个设置json值,来自php服务器。并且有一些动态的变化。我将这个设置json值转换为php数组..有很多这些。所以我写了一个函数转换成PHP代码格式
我编写了一个toPhp
函数,该函数发布在http://jsfiddle.net/2HKMU/
我尝试将一个js文件设置转换为php代码..这有效..
var config_topfive = {
"type":"topfive",
"options":{
"ascending":false, "percentage":true, "limits":[25,5]
}
};
console.log( toPhp( config_topfive ) );
打印
array(
"type" => "topfive",
"options" => array(
"ascending" => false,
"percentage" => true,
"limits" => array(25,5)
)
)
我想知道,我错过了这次转换的任何事情......我怎样才能更好地改进这个功能..
我知道json_decode
,但我想将此setting json value in js file ,which made by designer
保留在php配置文件中..例如:config_topfive.php
。我将把这个函数console.log( toPhp( config_topfive ) )
的粘贴控制台打印复制到php文件
所以config_topfive.php
中的最终我的PHP代码看起来像
<?php
return array(
"type" => "topfive",
"options" => array(
"ascending" => false,
"percentage" => true,
"limits" => array(25,5)
)
);
答案 0 :(得分:3)
为什么你没有使用json_decode
和json_encode
http://www.php.net/manual/en/function.json-decode.php
http://www.php.net/manual/en/function.json-encode.php
示例json_decode
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
print_r(json_decode($json));
示例json_encode
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
输出
{"a":1,"b":2,"c":3,"d":4,"e":5}
编辑:
我写了这个测试
function MakeArray(Json){
this.JArray=Json;
this.PArray=function(ar){
for (var J in ar) {
var Type=typeof(ar[J])
if(Type=="string"){
ar[J]="\""+ar[J]+"\"";
}else if( Type== "object") {
if(ar[J] instanceof Array){
ar[J]=this.PArray(ar[J]);
//ar[J]="\""+J+"\"=>array("+ar[J].join(',')+")";
ar[J]="array("+ar[J].join(',')+")";
}else{
ar[J]="\""+J+"\"=>array("+this.MArray(ar[J])+")";
}
//ar[J]=this.MArray(ar[J]);
}
}
return ar;
}
this.MArray=function(IArray){
var Output=Array();
var Count=0;
for (var i in IArray) {
var Type=typeof(IArray[i]);
if( Type== "object") {
if(IArray[i] instanceof Array){
IArray[i]=this.PArray(IArray[i]);
Out="\""+i+"\"=>array("+IArray[i].join(',')+")";
}else{
Out="\""+i+"\"=>array("+this.MArray(IArray[i])+")";
}
}else{
if(Type=="string" || typeof(i)=="string"){
Out="\""+i+"\"=>\""+IArray[i]+"\"";
}else if(Type=="number"){
Out=IArray[i];
}else{
Out="\""+i+"\"=>"+IArray[i];
}
}
Output[Count++]=Out;
}
return Output.join(',');
}
return "array("+this.MArray(this.JArray)+")";
}
document.getElementById('php').innerHTML =MakeArray(config_topfive);
答案 1 :(得分:1)
json_decode将允许您获得相同的结果,并允许您传递“关联”布尔值,以确定您是将其作为普通数组还是关联数。
json_encode会让您执行相反的操作。