亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 PHP 和 MySQL 查詢為一系列數據創建 JSON

使用 PHP 和 MySQL 查詢為一系列數據創建 JSON

PHP
米琪卡哇伊 2022-06-17 15:48:29
我正在嘗試使用 JSON 數據創建條形圖,并且需要將格式更改為月份系列,但我對如何做到這一點感到困惑。請幫助我如何解決這個問題。當前 JSON 數據:{ “數據”: [{“名稱”:“一月”,“設施”:“討論室”,“價值”:22},{“名稱”:“一月”,“設施”:“卡雷爾室”,“價值”:102},{“名稱”:“一月”,“設施”:“儲物柜”,“價值”:5},{“名稱”:“二月”,“設施”:“討論室”,“價值”:86},{“名稱”:“二月”,“設施”:“卡雷爾室”,“價值”:155},{“名稱”:“Mac”,“設施”:“卡雷爾室”,“價值”:224},{“名稱”:“Mac”,“設施”:“儲物柜”,“價值”:3},]}所需的 JSON 數據:{ “數據”: [{“名稱”:“一月”,“系列”:[{ "name":"討論室","value": 22},{ "name": "Carrel Room", "value": 102},{“名稱”:“儲物柜”,“價值”:5},]“名稱”:“二月”,“系列”:[{ "name":"討論室","value": 86},{ "name": "Carrel Room", "value": 155},{“名稱”:“儲物柜”,“價值”:0},]“名稱”:“三月”,“系列”:[{ "name":"討論室","value": 0},{ "name": "Carrel Room", "value": 224},{“名稱”:“儲物柜”,“價值”:3},]]}我的代碼:$db = mysqli_connect($host, $user, $pass, $database) or die("you did not connect");    header('Access-Control-Allow-Origin: *');    header("Access-Control-Allow-Credentials: true");    header('Access-Control-Allow-Methods: GET');    header('Access-Control-Max-Age: 1000');    header('Access-Control-Allow-Headers: Origin, Content-Type');$facility =($_GET['year']);$query = "select monthname(datetime) as 'name',        case             when all_items.itype = '127' then 'Discussion Room'            when all_items.itype = '126' then 'Carrel Room'            when all_items.itype = '121' then 'Locker'            else '0'         end as 'facility',        count(*) AS 'value'        from statistics         left join (            select itemnumber, itype from deleteditems            union            select itemnumber, itype from items             ) as all_items USING (itemnumber)        where all_items.itype in (127, 126, 121) and        statistics.type = 'issue' and        year(statistics.datetime) = '$facility'         group by month(datetime), all_items.itype desc";$result = mysqli_query($db, $query)or die(mysqli_error());$response = array();$posts = array();
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

您應該更改查詢數據庫的方式。您應該使用準備好的語句,而不是在查詢中注入字符串。這使您容易受到 sql 注入的影響。

閱讀有關準備好的語句的更多信息。

回到問題:

對于發現的每個月,您需要創建一個數組,其中包含一個系列數組。檢查月份數組是否存在,如果它不創建它并創建系列數組。然后創建一個包含系列數據的數組,并將其中的系列數據推送到該月的系列數組中。

查看代碼要容易得多。我也添加了評論。


$result = mysqli_query($db, $query)or die(mysqli_error());


$response = array();


$posts = array();


while($row=$result->fetch_assoc()) 

{

    $month=$row['name'];


    if(!isset($posts[$month])){// Check to see if the month array exists

    //if it doesn't create it

        $posts[$month] = array();


        //create the series array so data can be pushed to it

        $posts[$month]["series"] = array();

    }


    //check to see if it is null and if it is make it 0

    if(is_null($row['value'])){

        $row['value'] =0;

    }


    //put the series data in the correct format with correct names

    $series_array = array(

        "name" => $row['facility'],

        "value" => $row['value']

    );


    //push the series data into the months series array

    array_push($posts[$month]["series"],$series_array);

}

// put months and series together 

$new_posts=array();

foreach($posts as $month_name => $data){

    array_push($new_posts, array("name"=> $month_name, "series"=> $data['series'] ));

}


$posts = $new_posts;

$response['data'] = array($posts);


header('Content-Type: application/json');

echo json_encode($response, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);


查看完整回答
反對 回復 2022-06-17
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

這是您需要的代碼


$result = mysqli_query($db, $query)or die(mysqli_error($db));

$response = array();

$posts = array();

while($row=$result->fetch_assoc()){

    $month = $row['name'];

    $value = $row['value'];

    if(empty($value)){

        $value = 0;

    }

    $series = array(

        "name"  => $row['facility'],

        "value" => $value 

    );

    $found_key = array_search($month, array_column($posts, 'name'));// check if month value exist in name key 

    if(!$found_key){//if not found

        $found_key = sizeof($posts);// get the size of array which will be 1 more then last index of array 

    }

    $posts[$found_key]['name']  = $month;// this add name of month 

    if(!isset($posts[$found_key]['series'])){ // check if series is set

       $posts[$found_key]['series'] = array();// or set it

    }

    $posts[$found_key]['series'][] = $series; //assign the series array

}

$response['data'] = $posts;

header('Content-Type: application/json');

echo json_encode($response, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);


查看完整回答
反對 回復 2022-06-17
  • 2 回答
  • 0 關注
  • 165 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號