する必要があって、正規表現の練習ついでに作ってみたので
ついでに公開してみます。
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から作るっぽい逆側はめんどくさそうだなー