json到php代码,需要功能改进

时间:2013-04-11 11:19:30

标签: php javascript

我的网站在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)
    )
);

2 个答案:

答案 0 :(得分:3)

为什么你没有使用json_decodejson_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会让您执行相反的操作。