PHP多维数组到JSON对象数组


PHP Multidimensional Array to JSON Array of Objects

ng-google-chartsbar-chart(请参阅此处)模块接受以下格式的数据:

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"}
    ]
  }
];

我的PHP的print_r($data)是:

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中的数据成为模块所需的格式?

您可以如下更改$data:

$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"
            }
        ]
    }
]

中的评估演示