PHPのArrayをJsonに 2

する必要があって、正規表現の練習ついでに作ってみたので
ついでに公開してみます。

function arrayToJson($string,$callback){
  $preg = “/(a|s|i|[^}]*?):(\d+)(?:[:](\{|(?:\\\”;|.)*?\”;)|[;])|(\})/”;
  if(!preg_match_all($preg,$string,$matches)){return false;}
  $i=0;
  foreach($matches[3] as $key=>$val){
    if(($i%2)==1){
      $matches[3][$key] = preg_replace(‘[;$]’,’:’,$val);
    }else{
      $matches[3][$key] = preg_replace(‘[;$]’,’,’,$val);
    }
    if(empty($val)){
      $matches[3][$key – 1] = preg_replace(‘[,$]’,”,$matches[3][$key – 1]);
      $matches[3][$key] = “},”;
    }else{
      $i++;
    }
  }
  array_unshift($matches[3],$callback.'(‘);
  array_pop($matches[3]);
  array_push($matches[3],’})’);
  return implode($matches[3]);
}

使い方

はインクルードかなんかしてから

  $array[] = “いろいろ”:
  $string = serialize($array);  //arrayをserializeして
  print(arrayToJson($string,”jsonp”));  //functionに突っ込むだけ

  第一引数:変換する array
  第二引数:callback関数名

とするだけです。

出力結果は

$array1[‘name9’] = “aaa1”;
$array1[‘name6’] = “aaa2”;
$array2[‘name1’] = “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1”;
$array2[‘name2’] = “aaa2”;
$array2[‘name3’] = $array1;
$array2[‘name4’] = “aaa3″;

jsonp
(
  {
    ”name1″:”aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1″,
    ”name2″:”aaa2″,
    ”name3”:{“name9″:”aaa1″,”name6″:”aaa2″},
    ”name4″:”aaa3”
  }
)

となります。

逆に json を php に

はまだ考えてませんw

普通に吐き出すのめんどいなーと思っていたら
(pearとかいれてないので)
phpのserlializeが結構近しいデータだったのを思い出して
流用してみたかんじです。
なので、1から作るっぽい逆側はめんどくさそうだなー


->