将php-sql结果数组格式更改为具有自定义标签和值的json格式


change php sql results array format to json format with customized labels and values

我需要帮助转换这个json数据数组

{"Untracked":4,"Available":3,"Groups":"4","Users":"5"}

到这种类型的json

[{"label":"Untracked","value":"4"},
 {"label":"Available","value":"3"},
 {"label":"Groups","value":"4"},
 {"label":"Users","value":"5"}
]

我的方法是

public function graphs(){
    $company_id =$this->session->userdata('itms_company_id');
    $data['Untracked'] = $this->mdl_fetch->count_untracked_assets ($company_id);
    $data['Available'] = $this->mdl_fetch->count_available_devices ($company_id);
    $data['Groups'] = $this->mdl_fetch->count_unassigned_groups($company_id);
    $data['Users'] = $this->mdl_fetch->count_unassigned_users($company_id);
    echo json_encode($data);
}

试试这个:

public function graphs(){
    $company_id =$this->session->userdata('itms_company_id');
    $data[] = array( 'label' => 'Untracked', 'value' => $this->mdl_fetch->count_untracked_assets ($company_id));
    $data[] = array( 'label' => 'Available', 'value' => $this->mdl_fetch->count_available_devices ($company_id));
    $data[] = array( 'label' => 'Groups', 'value' => $this->mdl_fetch->count_unassigned_groups($company_id));
    $data[] = array( 'label' => 'Users', 'value' => $this->mdl_fetch->count_unassigned_users($company_id));
    echo json_encode($data);
}

这是一种方法,但似乎有点冗长。

json {}表示您想要一个对象,因此您可以使用简单的PHP stdClass()并添加相关属性,从mdl->fetch返回的数组中获取数据并加载对象。然后将其添加到$data数组中。

public function graphs(){
    $company_id = $this->session->userdata('itms_company_id');
    $d = $this->mdl_fetch->count_untracked_assets ($company_id);
    $o = new stdClass();
    $o->label = 'Untracked';
    $o->value = $d['Untracked'];
    $data[] = $o;
    $d = $this->mdl_fetch->count_available_devices ($company_id);
    $o = new stdClass();
    $o->label = 'Available';
    $o->value = $d['Available'];
    $data[] = $o;
    $d = $this->mdl_fetch->count_unassigned_groups($company_id);
    $o = new stdClass();
    $o->label = 'Groups';
    $o->value = $d['Groups'];
    $data[] = $o;
    $d = $this->mdl_fetch->count_unassigned_users($company_id);
    $o = new stdClass();
    $o->label = 'Users';
    $o->value = $d['Users'];
    $data[] = $o;
    echo json_encode($data);
}

这里是一个例子,它们具有相同的输出

$a = array(); <br>
$a[0]['label'] = "Untracked"; <br>
$a[0]['value'] = "4"; <br>
$a[1]['label'] = "Available"; <br>
$a[1]['value'] = "3"; <br>
$a[2]['label'] = "Groups"; <br>
$a[2]['value'] = "4"; <br>
$a[3]['label'] = "Users"; <br>
$a[3]['value'] = "3"; <br>
$json= json_encode($a); <br>
<b>Output</b> <br>
[{"label":"Untracked","value":"4"},<br>{"label":"Available","value":"3"},<br>{"label":"Groups","value":"4"},<br>{"label":"Users","value":"3"}]<br>

因此,您可以编写这样的函数:

function graphs(){
    $company_id =$this->session->userdata('itms_company_id');<br>
    $data[0]["lable"] = "Untracked";<br>
    $data[0]['value'] = $this->mdl_fetch->count_untracked_assets ($company_id);<br>
    $data[1]["lable"] = "Available";<br>
    $data[1]["value"] = $this->mdl_fetch->count_available_devices ($company_id);<br>
    $data[2]["lable"] = "Groups";<br>
    $data[2]["lable"] = $this->mdl_fetch->count_unassigned_groups($company_id);<br>
    $data[3]["lable"] = "Users";<br>
    $data[3]["lable"] = $this->mdl_fetch->count_unassigned_users($company_id);<br>
    echo json_encode($data);
}

无需更改整个函数。

echo json_encode($data);更改为return json_encode($data);

创建一个函数,在调用graph()函数后将格式从一个json更改为另一个json-您可以调用另一个函数来返回json数据,就像您想要的一样

function changeFormat($js)
{
    $jsArray = json_decode($js,true);
    $result = array();
    foreach($jsArray as $key=>$value)
   {
       $result[] = array("label"=>$key,"value"=>$value);
   }
    return json_encode($result);
}
echo changeFormat($js);