惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
G
Google Developers Blog
小众软件
小众软件
V
V2EX
月光博客
月光博客
腾讯CDC
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
D
Docker
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
MongoDB | Blog
MongoDB | Blog
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI

博客园 - bigwhiteshark(云飞扬)

linux下svn定时更新项目 PHP合成图片、生成文字、居中对齐、画线、矩形、三角形、多边形、图片抗锯齿、不失真 高性能源码示例 Html5 Canvas transform setTransform uv纹理坐标设定与贴图规则 容易答错的JS笔试题 JavaScript严谨模式(Strict Mode) property和attribute的区别 深入理解javascript 中的 delete(转) javascript中的call()和apply()方法的使用 Javascript 异步加载详解(转) Javascript框架的自定义事件(转) 一些Vim使用的小技巧 virtualbox centos安装增强工具和Centos与VirtualBox共享文件夹设置 yum搭建lnmp环境(CentOS6.4) CentOS中文man安装配置 在Linux里设置环境变量的方法(export PATH) 更新CentOS防火墙设置开启80端口访问 centos 6.4 server 安装nginx Centos安装vim
array2json() - Convert PHP arrays to JSON
bigwhiteshark(云飞扬) · 2014-04-04 · via 博客园 - bigwhiteshark(云飞扬)

array2json is a PHP function that will convert the array given as its argument into a JSON string. The created JSON string will be returned. This is very useful in Ajax apps using JSON over XML. If you are using XML, you better off using my xml2array() JavaScript function.

Note: This is an old function - if you use a new version of PHP(5.2 or newer) you will get the json_encode() function. That can be used to convert arrays to a JSON string.

Usage

First you need a PHP array. For example...

$data = array(
    'success'    =>    "Sweet",
    'failure'    =>    false,
    'array'      =>    array(),
    'numbers'    =>    array(1,2,3),
    'info'       =>    array(
                        'name'    =>    'Binny',
                        'site'    =>    'http://www.openjs.com/'
                 )
);

Provide this array as the argument of the array2json() function...

$json = array2json($data);

The resulting string will be(actual output - the source says print array2json($data);)...


{"success":"Sweet","failure":false,"empty_array":[],"numbers":[1,2,3],"info":{"name":"Binny","site":"http:\/\/www.openjs.com\/"}}

I am formatting the output for better readability...

{
	"success":"Sweet",
	"failure":false,
	"empty_array":{},
	"numbers":[1,2,3],
	"info":{
		"name":"Binny",
		"site":"http://www.openjs.com/"
	}
}

Handled Data types

All the basic data types are handled...

  • String
  • Numbers
  • Boolean(true/false)
  • Numerical Array
  • Associative Array

Objects are not handled for obvious reasons.

Code

<?php 
function array2json($arr) { 
    if(
function_exists('json_encode')) return json_encode($arr); //Lastest versions of PHP already has this functionality. 
    
$parts = array(); 
    
$is_list false//Find out if the given array is a numerical array 
    
$keys array_keys($arr); 
    
$max_length count($arr)-1
    if((
$keys[0] == 0) and ($keys[$max_length] == $max_length)) {//See if the first key is 0 and last key is length - 1 
        
$is_list true
        for(
$i=0$i<count($keys); $i++) { //See if each key correspondes to its position 
            
if($i != $keys[$i]) { //A key fails at position check. 
                
$is_list false//It is an associative array. 
                
break; 
            } 
        } 
    } 

    foreach(

$arr as $key=>$value) { 
        if(
is_array($value)) { //Custom handling for arrays 
            
if($is_list$parts[] = array2json($value); /* :RECURSION: */ 
            
else $parts[] = '"' $key '":' array2json($value); /* :RECURSION: */ 
        
} else { 
            
$str ''
            if(!
$is_list$str '"' $key '":'//Custom handling for multiple data types 
            
if(is_numeric($value)) $str .= $value//Numbers 
            
elseif($value === false$str .= 'false'//The booleans 
            
elseif($value === true$str .= 'true'
            else 
$str .= '"' addslashes($value) . '"'//All other things 
            // :TODO: Is there any more datatype we should be in the lookout for? (Object?) 
$parts[] = $str
        } 
    } 
    
$json implode(',',$parts); 
     
    if(
$is_list) return '[' $json ']';//Return numerical JSON 
    
return '{' $json '}';//Return associative JSON