使用 PHP 从 SQL 查询创建 JSON

我正在尝试以以下格式输出 JSON:


[{

  "category": "cONTIME",

  "value": 155,

  "color": "#0f9b0f"

},{

  "category": "cLATE",

  "value": 244,

  "color": "#dd1818"

},{

  "category": "cTOTAL",

  "value": 399,

  "color": "#0575E6"

},{

  "category": "ONTIME",

  "value": 60,

  "color": "#0f9b0f"

},{

  "category": "LATE",

  "value": 58,

  "color": "#dd1818"

},{

  "category": "TOTAL",

  "value": 118,

  "color": "#0f9b0f"

}]

我正在执行的存储过程返回下表 - 这是 SQL SERVER - 我对不感兴趣的列进行了灰色处理

http://img3.mukewang.com/60f14f6e0001874a05380048.jpg

我已经尝试过使用


$categories = [

    'cONTIME' => $row['cONTIME'],

    'cLATE' => [],

    'cTOTAL' => [],

];

$colors = [

    'ONTIME' => "#0f9b0f",

    'LATE' => "#dd1818",

    'TOTAL' => "#0575E6",

];


$json = array();


while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

        $json['category'] = $categories;

        $json['value'] = $row;

        $json['color'] = $colors;

}

echo json_encode($json);

返回这个:


{

   "category":{

      "cONTIME":null,

      "cLATE":[


      ],

      "cTOTAL":[


      ]

   },

   "value":{

      "cTOTAL":399,

      "cONTIME":155,

      "cLATE":244,

      "cPERCENTS":38,

      "TOTAL":118,

      "ONTIME":60,

      "LATE":58,

      "PERCENTS":50,

      "KPI":"UP"

   },

   "color":{

      "ONTIME":"#0f9b0f",

      "LATE":"#dd1818",

      "TOTAL":"#0575E6"

   }

}

我也尝试过这个:


$json = array();


while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {          

        $json[] = $row;

}

echo json_encode($json);

返回:


[

   {

      "cTOTAL":399,

      "cONTIME":155,

      "cLATE":244,

      "cPERCENTS":38,

      "TOTAL":118,

      "ONTIME":60,

      "LATE":58,

      "PERCENTS":50,

      "KPI":"UP"

   }

]

除了上述方法,我还尝试了许多其他方法和示例,但似乎无法实现我需要的格式。我完全了解 PDO、准备好的语句、注入等!我只需要先格式化 JSON,但在此先感谢您的建议


任何帮助将不胜感激 - PHP Noob


慕工程0101907
浏览 201回答 1
1回答

海绵宝宝撒

这样的事情应该工作:$json = array();while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {              foreach ($row as $fieldName => $fieldValue) {        if (in_array($fieldName, ['cTOTAL', 'cONTIME', 'cLATE', 'TOTAL' ,'ONTIME', 'LATE'])) {            $json[] = [                "category" => $fieldName,                "value" => $fieldValue,                "color" => getColorByFieldName($fieldName),            ];        }    }}echo json_encode($json);function getColorByFieldName($fieldName) {    if ($fieldName === 'ONTIME' || $fieldName === 'cONTIME') {        return '#0f9b0f';    }    if ($fieldName === 'LATE' || $fieldName === 'cLATE') {        return '#dd1818';    }    if ($fieldName === 'TOTAL' || $fieldName === 'cTOTAL') {        return '#0575E6';    }}
打开App,查看更多内容
随时随地看视频慕课网APP