Преобразование массива PHP в JSON

Преобразование массива PHP в JSON

14.10.2014

В посте приведена старая функция, в php версии 5.2 и выше используйте функцию json_encode(), к сожалению из-за настроек клиентских хостингов, это не всегда доступно даже на старших версиях php, так что сохранил на память)

array2json – функция PHP, которая конвертирует массив в результирующую строку в формате JSON.

Функция array2json.

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\/"}}

Поддерживаемые типы данных:

Все основные типы данных:

  • Строки
  • Числа
  • Логические(true/false)
  • Индексные массивы
  • Ассоциативные массивы

Объекты не поддерживаются.

Перевод статьи Binny VA



Узнал сам - поделись с друзьями!

Возврат к списку