为了账号安全,请及时绑定邮箱和手机立即绑定

使用 PHP 从 SQL 查询创建 JSON

使用 PHP 从 SQL 查询创建 JSON

PHP
慕工程0101907 2021-07-12 01:04:18
我正在尝试以以下格式输出 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 - 我对不感兴趣的列进行了灰色处理我已经尝试过使用$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
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

这样的事情应该工作:


$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';

    }

}


查看完整回答
反对 回复 2021-07-16
  • 1 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信