Так сказать, проба пера в ООП =) Методом Add добавляем элементы (которые могут быть массивами), методом Get - получаем JSON-строку. Можно добавить элемент, получить строку, потом добавить еще элемент. Можно очистить буфер специально, методом Clear, и при получении JSON-строки. Вообщем, смотрите сами: Код (PHP): <?php /* JSON AUTOGEN 1.0 Vasilii B. Shpilchin (c) 2009 License: BSD */ class JSON_AUTOGEN { private $buffer = array(); private $result = null; /* Метод очистки буфера */ public function Clean () { $this -> buffer = null; $this -> result = null; } /* Получение результата */ public function Get ($clean = false) { //Можно сразу и буфер очистить $this -> compileJSON ($this -> buffer); $result = '{' . $this -> result . '}'; if ($clean) $this -> Clean(); return $result; } /* Добавление элемента */ public function Add ($key, $element=null) { if (!$key) return false; $this -> buffer[] = array('key'=>$key, 'value'=>$element); } /* Компилируем JSON */ private function compileJSON ($array) { $this -> result = null; foreach ($array as $element) { $key = addslashes($element['key']); $value = $element['value']; if (is_array($value)) { $value = $this -> arrayToJSON($value); } else { $value = '"' . addslashes($value) . '"'; } //Ключи ставить только если они определены if ($key) { $tmp = '"' . $key .'":' . $value; } else { $tmp = $value; } $tmp .= ','; $this -> result .= $tmp; } //После последнего элемента запятая не нужна $this -> result = substr_replace($this -> result,null,strlen($this -> result)-1); } /* Преобразование массива в JSON */ private function arrayToJSON ($array) { $string = '['; foreach ($array as $key => $value) { //Рекурсивная обработка if (is_array($value)) { $string .= '"' . addslashes($key) . '":'; $string .= $this -> arrayToJSON($value) . ']'; } else { $string .= '"' . addslashes($key) . '":"' . addslashes($value) . '"'; $string .= ','; } } $string = substr_replace($string,']',strlen($string)-1); return $string; } } //end class ?>
Мдя %) Не думал, что моя версия PHP 5.1.5 настолько устарела =) Ну, эта функция заменяет обе приватные функции класса =) Зато класс пойдет на старых версиях =)
Код (Text): # public function Clean () { # $this -> buffer == null; # $this -> result == null; # } Что это? :lol: Если хочешь использовать нуль поинтер, то используй операцию присвоения, а не сравнения. И еще одно замечание - форматируй код в одном стиле, все названия переменных/методов начинаются с маленькой буквы, классы с большой, несколько слов в одном наименовании разделяются заглавными буквами , а не "_" и т.д. Самому приятней будет. А вообще велосипеды это круто, да :roll:
Хе-Хе, я тоже пол дня убил на похожий велосипед, а потом гордо сообщил коллегам, что у нас теперь есть удобная функция для создания JSON. И в ответ получил ссылку на json_encode и ехидный смайлик ))
Это еще раз доказывает то, что вне зависимости от опыта, нужно периодически пролистывать документацию.