Преобразование yaml в json - нужен совет. 1.X

 
Посетитель
small user social cms
Сообщений: 72
Здравствуйте.
Есть таблица в БД
Код PHP:
  1. id | some_key | title | description | files
Я беру из неё строки по заданному ключу some_key, и формирую json
Код PHP:
  1.  
  2. function getStroki($some_key){
  3. $sql = "SELECT *
  4. FROM cms_some_table
  5. WHERE some_key='{$some_key}'";
  6. $result = $inDB->query($sql) ;
  7. if ($inDB->num_rows($result)){
  8. while($item = $inDB->fetch_assoc($result)){
  9. $massiv[] = $item;
  10. }
  11. }
  12. return $massiv;
  13. } // взяли массив
  14. $json_mass = json_encode(getStroki($some_key)); // сделали json
  15.  
И всё хорошо))) одно только плохо - в поле files лежат данные, упакованные с помощью YAML (т.е., несколько переменных в одной ячейке). И естественно, json из них не формируется, так как для начала yaml надо разобрать в отдельный массив, который будет вложенным в основной. В инстанте для этого предусмотрено yamlToArray, но как это сделать внутри функции getStroki - ума не приложу.
Помогите, пожалуйста, коллеги!
Услуги | Компонент QUIZ-манагер
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2606
$somearray = cmsCore::yamlToArray('чего_запихиваем_в_массив');

Тоже не заметил, что про первую ветку...
Редактировалось: 1 раз (Последний: 23 января 2017 в 13:55)
Реклама
cms
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Строку id | some_key | title | description | files преобразовать в массив
Код PHP:
  1. $array = cmsModel::yamlToArray($str);
потом передаете в шаблон в json формате
Код PHP:
  1. $this->cms_template->renderJSON($array);
* Это если вы передаете из контроллера в шаблон

Не заметил что тема про 1 ветку
Редактировалось: 1 раз (Последний: 23 января 2017 в 13:49)
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Сообщений: 72
Ris, Evanescence, я поясню

У меня должен получиться вот такой json
Код PHP:
  1.  
  2. {
  3. 'title': 'Первый заголовок',
  4. 'description': 'Первое описание',
  5. 'files': ['Файл 1-1.jpg', 'Файл 1-2.jpg', 'и тд', 'и тд']
  6. },
  7. {
  8. 'title': 'Второй заголовок',
  9. 'description': 'Второе описание',
  10. 'files': ['Файл 2-1.jpg', 'Файл 2-2.jpg', 'и тд', 'и тд']
  11. }
  12.  
а получается же
Код PHP:
  1.  
  2. {
  3. 'title': 'Первый заголовок',
  4. 'description': 'Первое описание',
  5. 'files': ['чёртичто']
  6. },
  7. {
  8. 'title': 'Второй заголовок',
  9. 'description': 'Второе описание',
  10. 'files': ['чёртичто']
  11. }
  12.  
из-за того, что в поле files лежат данные yaml

То есть, json-то сам формируется, но как мне распарсить yaml, чтобы вместо 'чёртичто' получилось 'Файл 2-1.jpg', 'Файл 2-2.jpg', 'и тд', 'и тд' ?

Надо как-то взять из массива $massiv[номер итерации]['files'], сделать наверно так
Код PHP:
  1.  
  2. $xxx = cmsCore::yamlToArray($massiv[номер итерации]['files']);
  3. $massiv[номер итерации]['files'] = $xxx; // обратно присвоить распарсенное значение элементу files основного массива
  4.  
Я так попробовал, но вместо чёртичто появляется теперь другое чёртичто...

Что я не так делаю? Глаза замылились, нужен свежий взгляд...
Услуги | Компонент QUIZ-манагер
Посетитель
small user social cms
Сообщений: 72
Все, пока задавал вопрос, и пытался объяснить, так и сам понял))) переписал цикл так
Код PHP:
  1.  
  2. $i = 0;
  3. while($item = $inDB->fetch_assoc($result)){
  4. $massiv[] = $item;
  5. $file = cmsCore::yamlToArray($massiv[$i]['files']);
  6. // а теперь главное переработать массив же!!! вот я Семён Семёныч
  7. foreach($file as $key=>$value) {
  8. $a[] = $key; // пишем значения в новый массив
  9. }
  10. $massiv[$i]['files'] = $a; // и присвоим старому массиву значения из нового массива
  11. unset($a); // а потом новый массив удалим, чтоб не мешался
  12. $i++; // счётчик клац-клац
  13. }
  14.  
Услуги | Компонент QUIZ-манагер
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4338
Олегсей, не удержался, открыл вам тему заново, ибо с самого начала не стоит лепить г-код.

Код PHP:
  1. function get_items($some_key){ // Учитесь сразу называть функции нормальными именами, без транслитезации, ибо колхоз
  2. $items = array(); // массив в данном случае нужно определить, т.к. записей может не быть и получите нотис
  3. $sql = "SELECT *
  4. FROM cms_some_table
  5. WHERE some_key='{$some_key}'";
  6. $result = $inDB->query($sql) ;
  7. if ($inDB->num_rows($result)){
  8. while($item = $inDB->fetch_assoc($result)){
  9. $item['files'] = cmsCore::yamlToArray($item['files']);
  10. $items[] = $item;
  11. }
  12. }
  13. return $items;
  14. }
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
Сообщений: 72
Fuze:
не стоит лепить г-код
Это был китайский стиль, бессмысленный и беспощадный)) писалось на скорую руку, для того, чтобы клиент посмотрел, что получится в итоге.
Проект утверждён, всё уже переписывается в соответствии со стандартами. Не стоит беспокоиться. Но всё равно, спасибо.

А если серьезно - насчёт транслитерации названий переменных и функций - в корне не согласен. Колхоз - это $jhpA_55g, имхо, конечно. А к примеру, у итальянцев видел функцию ricArticolo вместо getArticle, или css-класс titolo вместо header. Так почему русским нельзя?
Редактировалось: 1 раз (Последний: 23 января 2017 в 22:48)
Услуги | Компонент QUIZ-манагер
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4338
Олегсей:
А если серьезно - насчёт транслитерации названий переменных и функций - в корне не согласен.
Ну моё дело посоветовать, как делать правильно. А там дальше сами smile
Олегсей:
Колхоз - это $jhpA_55g
Это идиотизм или обфускация joke
Олегсей:
Так почему русским нельзя?
Ровняться нужно на стандарты и общепринятые принципы. А так, конечно, никто не запрещает писать с подворотом, главное, чтобы синтаксис соблюдался.
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
Сообщений: 72
Fuze, кстати, случайно вчера нарыл http://govnokod.ru, читал, много думал rofl

Еще раз спасибо, кроме шуток. К советам опытных людей всегда прислушиваюсь.
Услуги | Компонент QUIZ-манагер
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.