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.
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
}

Comments
I need a similar problem,
I am facing a problem in my project, I am trying to extract data from a stock website using a PHP code and then store the PHP array output of this code in an object oriented local database it’s name is Amos, but the problem is that Amos database doesn’t support to store directly a PHP array in it because it’s based on C tuples it means that I need to find a way to convert the PHP array into C tuples and then store it in the Amos local database.
So would you please to help me in this? If you can give me a way to do this? If you have a code that I can use it to implement this?
Thank you very much and I am looking to hear from you soon
P.s: if anyone can send me any solution for this problem to my e-mail address:
kgh_78@yahoo.com
you safe my time because I start to write same code but in 2 minutes after start I try to google good solutions (yea, I know about JSON modules and framework's classes declared on json.org but don't like them) and have found your site.
-----------------------------------
$parts = array();
$is_list = false;
if(count($arr)>0){
...
}
$json = implode(',',$parts);
-----------------------------------
Also seems it need is_array() function. But will be better if everyone try to code it on one's own.
Thanks again!
We've changed the first condition to have triple equals to avoid problems we had with type coercion:
... if(($keys[0] === 0) and ($keys[$max_length] === $max_length)) {
I also added explicit handling for "null"
.... elseif($value === null) $str .= 'null'; //send actual null, not 'null'.
Josh
Array
(
[0] => Array
(
[0] => cod_empresa
[1] => num_identificacion
[2] => razon_social
[3] => representante
[4] => tipo_empresa
[5] => telefono
[6] => direccion
)
[1] => Array
(
[0] => 1
[1] => 805029800
[2] => Empresa 1
[3] => Juliana
[4] => Propia
[5] => 475-89-96
[6] => Cr. 9 No. 9-54
)
[2] => Array
(
[0] => 2
[1] => 14528964
[2] => Empresa 2
[3] => Diego
[4] => Propia
[5] => 4516789
[6] => Cll 1 No. 13-27
)
a, strong, em, b, i, code, pre, pandbrallowed. Other tags will be shown as code(< will become <). Urls, Line breaks will be auto-formated.