2016-05-08 6 views
-1

ng-google-charts. bar-chart модуль (Refer here) принимает данные в следующем формате:Многомерный массив PHP в массив JSON объектов

var chartData = 
[ 
    { 
    "c": [ // First bar 
     { "v": "Thing A" }, // c_name 
     { "v": 6 }, // # of c_assigned - c_completed 
     { "v": "red"}, // color of a portion of bar 
     { "v": 28 }, // # of c_completed 
     { "v": "green"} // color of a portion of bar 
    ] 
    }, 
    { 
    "c": [ // Second bar 
     { "v": "Thing B" }, 
     { "v": 4 }, 
     { "v": "red"}, 
     { "v": 30 }, 
     { "v": "green"} 
    ] 
    }, 
    { 
    "c": [ // Third bar 
     { "v": "Thing C" }, 
     { "v": 12 }, 
     { "v": "red"}, 
     { "v": 21 }, 
     { "v": "green"} 
    ] 
    } 
]; 

И print_r($data) моего PHP является:

Array 
(
    [0] => Array 
    (
     [c_name] => Thing A 
     [c_assigned] => 34 
     [c_completed] => 28 
    ) 
    [1] => Array 
    (
     [c_name] => Thing B 
     [c_assigned] => 34 
     [c_completed] => 30 
    ) 
    [2] => Array 
    (
     [c_name] => Thing C 
     [c_assigned] => 33 
     [c_completed] => 21 
    ) 
) 

Теперь json_encode($data) приводит к следующему:

[ 
    { 
    "c_name":"Thing A", 
    "c_assigned":"34", 
    "c_completed":"28" 
    }, 
    { 
    "c_name":"Thign B", 
    "c_assigned":"34", 
    "c_completed":"30" 
    }, 
    { 
    "c_name":"Thing C", 
    "c_assigned":"33", 
    "c_completed":"21" 
    } 
] 

И json_encode($data, JSON_FORCE_OBJECT):

{ 
    "0": 
    { 
     "c_name":"Thing A", 
     "c_assigned":"34", 
     "c_completed":"28" 
    }, 
    "1": 
    { 
     "c_name":"Thign B", 
     "c_assigned":"34", 
     "c_completed":"30" 
    }, 
    "2": 
    { 
     "c_name":"Thing C",  
     "c_assigned":"33", 
     "c_completed":"21" 
    } 
} 

Я использую $http в получении данных:

function getThings(a,b){ 
    $http({ 
    method: "POST", 
    data: $.param({a:a,b:b}), 
    url: BASE_URL+"Conroller/Function", 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
    }).success(function(data){ 
    $scope.things = data; 
    }); 
} 

Я новичок в JSON. Как сделать данные из php похожими на формат, необходимый модулю?

ответ

1

Вы можете изменить ваши $ данные следующим образом:

$data = array_map(function ($el) { 
    return array(
     "c" => array(
      array("v" => $el['c_name']), 
      array("v" => $el['c_assigned']), 
      array("v" => 'red'), 
      array("v" => $el['c_completed']), 
      array("v" => 'green'), 
     ) 
    ); 
}, $data); 

Затем генерировать JSON следующим образом:

$json = json_encode($data, JSON_PRETTY_PRINT); 

Это будет иметь в качестве значения:

[ 
    { 
     "c": [ 
      { 
       "v": "Thing A" 
      }, 
      { 
       "v": 34 
      }, 
      { 
       "v": "red" 
      }, 
      { 
       "v": 28 
      }, 
      { 
       "v": "green" 
      } 
     ] 
    }, 
    { 
     "c": [ 
      { 
       "v": "Thing B" 
      }, 
      { 
       "v": 34 
      }, 
      { 
       "v": "red" 
      }, 
      { 
       "v": 30 
      }, 
      { 
       "v": "green" 
      } 
     ] 
    }, 
    { 
     "c": [ 
      { 
       "v": "Thing C" 
      }, 
      { 
       "v": 33 
      }, 
      { 
       "v": "red" 
      }, 
      { 
       "v": 21 
      }, 
      { 
       "v": "green" 
      } 
     ] 
    } 
] 

Demo on eval.in

Смежные вопросы