В посте приведена старая функция, в 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