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
Форумы портала PHP.SU :: Версия для печати :: Json распарсить двумерный массив
Форумы портала PHP.SU » » Если скрипт не работает » Json распарсить двумерный массив

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

1. des1roer - 17 Апреля, 2014 - 11:40:25 - перейти к сообщению
Есть страничка на пхп, она собирает данные из таблицы, получает двумерный массив
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).
И сразу же вопрос - как сделать это красивее, и вообще то лучше в одной странице это сделать. Функцию где-то подсмотрел, для одномерного массива хватало, а для двумерного что-то интереснее нужно
2. MADONZY - 08 Мая, 2014 - 03:11:39 - перейти к сообщению
Если у тебя закодированы только массивы и только одномерные, то тебе подойдет эта функция:
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. }

Если нужно обрабатывать многомерные массивы, докрути эту функцию сам Улыбка
3. IllusionMH - 08 Мая, 2014 - 05:27:22 - перейти к сообщению
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

 

Powered by ExBB FM 1.0 RC1