array2json() - Convert PHP arrays to JSON
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
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。