array2json() - Convert PHP arrays to JSON

7165 ワード

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