В посте приведена старая функция, в php версии 5.2 и выше используйте функцию json_encode(), к сожалению из-за настроек клиентских хостингов, это не всегда доступно даже на старших версиях php, так что сохранил на память)
array2json – функция PHP, которая конвертирует массив в результирующую строку в формате JSON.
function array2json($arr) {
if(function_exists('json_encode')) return json_encode($arr); //Старшие версии php уже имеют данный функционал.
$parts = array();
$is_list = false;
//Проверяем, является ли массив индексным
$keys = array_keys($arr);
$max_length = count($arr)-1;
if(($keys[0] == 0) and ($keys[$max_length] == $max_length)) {//Проверяем что первый ключ 0, а последний length - 1
$is_list = true;
for($i=0; $i<count($keys); $i++) { //Проверяем чтобы каждый ключ соответствовал своей позиции
if($i != $keys[$i]) { //Ключ не соответствует позиции.
$is_list = false; //это ассоциативный массив.
break;
}
}
}
foreach($arr as $key=>$value) {
if(is_array($value)) { //пользовательская обработка массивов
if($is_list) $parts[] = array2json($value); /* :рекурсия: */
else $parts[] = '"' . $key . '":' . array2json($value); /* :рекурсия: */
} else {
$str = '';
if(!$is_list) $str = '"' . $key . '":';
//Custom handling for multiple data types
if(is_numeric($value)) $str .= $value; //числа
elseif($value === false) $str .= 'false'; //условные
elseif($value === true) $str .= 'true';
else $str .= '"' . addslashes($value) . '"'; //все остальное
$parts[] = $str;
}
}
$json = implode(',',$parts);
if($is_list) return '[' . $json . ']';//возвращает индексный JSON
return '{' . $json . '}';//возвращает ассоциативный JSON
}
Например, мы имеем массив php:
$data = array(
'success' => "Sweet",
'failure' => false,
'array' => array(),
'numbers' => array(1,2,3),
'info' => array(
'name' => 'Binny',
'site' => 'http://www.openjs.com/'
)
);
Передаем этот массив в качестве параметра функции array2json:
$json = array2json($data);
В результате получаем строку в формате json (для вывода использована функция print_r(array2json($data));)
{"success":"Sweet","failure":false,"empty_array":[],"numbers":[1,2,3],"info":{"name":"Binny","site":"http:\/\/www.openjs.com\/"}}
Все основные типы данных:
Объекты не поддерживаются.
Перевод статьи Binny VA