Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Json распарсить двумерный массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: php + js
des1roer
Отправлено: 17 Апреля, 2014 - 11:40:25
Post Id



Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Есть страничка на пхп, она собирает данные из таблицы, получает двумерный массив
php

выдает
[["485","485","579","577","577"],["2014-04-01 10:17:53","2014-04-01 10:17:52","2014-03-28 15:28:44","2014-03-28 15:28:43","2014-03-28 15:28:42"]]
необходимо распарсить этот массив и отдать функции в виде двумерного массива в Js .
CODE (javascript):
скопировать код в буфер обмена
  1. App = function(){
  2.     var ajaxStack = [];
  3.     this.pushAjaxResult = function(ajaxResult)
  4.     {
  5.         ajaxStack.push(ajaxResult);
  6.     }
  7.     this.getLastAjaxResult = function()
  8.     {
  9.         return ajaxStack[ajaxStack.length - 1];
  10.     }
  11. };
  12. app = new App(); // теперь window.app будет ссылаться на инстанс App
  13.         $.get('/testo.php',function(Sum){
  14.         var x = JSON.parse(Sum);
  15.         app.populateTable(x);
  16.         },"json")
  17.                 app.populateTable = function(x) {
  18.                 var buf =[];
  19.                 for (var i = 0;i<x.length;i++){
  20.                         buf[i]=[x[i]];
  21.                 }              
  22.                 $.plot($("#placeholder"), [ buf ]);
  23.  

вот эта функция работает для одномерного массива. но для двумерного сваливает все значения одного столбца в buf (0), а второго в buf (1).
И сразу же вопрос - как сделать это красивее, и вообще то лучше в одной странице это сделать. Функцию где-то подсмотрел, для одномерного массива хватало, а для двумерного что-то интереснее нужно
 
 Top
MADONZY
Отправлено: 08 Мая, 2014 - 03:11:39
Post Id


Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Если у тебя закодированы только массивы и только одномерные, то тебе подойдет эта функция:
PHP:
скопировать код в буфер обмена
  1. function double_json_decode($jstr) {
  2.  
  3.         if(!is_string($jstr)) return -1;
  4.         $elem_count = substr_count($jstr, "],[") + 1;
  5.  
  6.         if($elem_count == 1) return json_decode($jstr);
  7.  
  8.         $jstr = substr($jstr, 1, -1);
  9.         while($elem_count--) {
  10.                 $cur_arr = strstr($jstr, ']', true).']';
  11.                 $res_arr[] = json_decode($cur_arr);
  12.                 $jstr = substr($jstr, strlen($cur_arr)+1);
  13.         }
  14.  
  15.         return $res_arr;
  16. }

Если нужно обрабатывать многомерные массивы, докрути эту функцию сам Улыбка
 
 Top
IllusionMH
Отправлено: 08 Мая, 2014 - 05:27:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




des1roer, вы сами отдаете в таком "кривом" виде, а потом удивляетесь почему вышло так. Перед кодированием сделайте array_combine. Но тогда на клиенте нужно будет работать с ним как с объектом(ассоциативных массивов нет), да и запихивание buf в массив выглядит крайне подозрительно.
(Добавление)
array_combine отпадает(( там вообще повторяются "ключи".
Вы вообще в каком формате должны получить входные данные?
(Добавление)
CODE (javascript):
скопировать код в буфер обмена
  1. for (var i = 0;i<x[0].length;i++){
  2.     buf[i]=[x[0][i],x[1][i]];
  3. }

и потом вместо [buf] просто buf при вызове plot

(Отредактировано автором: 08 Мая, 2014 - 05:46:30)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB