我有一个来自json
存储过程的mysql
输出。一切正常,但是我需要将json
输出转换为其他所需格式。
我的json
如下所示(这是在json_encode
查询中简单的mysql
的结果):
[
{
"stack": monday,
"name": "banana",
"i_value_p": "1.1",
"i_value_n": "2.9",
"i_value_u": "0.0"
},
{
"stack": monday,
"name": "apple",
"i_value_p": "1.5",
"i_value_n": "3.9",
"i_value_u": "0.0"
},
{
"stack": monday,
"name": "grape",
"i_value_p": "1.1",
"i_value_n": "3.1",
"i_value_u": "0.0"
},
{
"stack": wednesday,
"name": "banana",
"i_value_p": "2.4",
"i_value_n": "6.0",
"i_value_u": "0.0"
},
{
"stack": wednesday,
"name": "apple",
"i_value_p": "3.0",
"i_value_n": "7.6",
"i_value_u": "0.0"
},
{
"stack": wednesday,
"name": grape",
"i_value_p": "2.3",
"i_value_n": "6.0",
"i_value_u": "0.0",
"fill_color": "#0B62A4"
},
{
"stack": friday,
"name": "banana",
"i_value_p": "2.2",
"i_value_n": "6.5",
"i_value_u": "0.0"
},
{
"stack": friday,
"name": "apple",
"i_value_p": "3.0",
"i_value_n": "7.9",
"i_value_u": "0.0"
},
{
"stack": friday,
"name": "grape",
"i_value_p": "2.0",
"i_value_n": "5.4",
"i_value_u": "0.0"
}
]
我想要的是以下json
输出:
[
{
name: "i_value_p",
data: [1.1, 1.5, 1.1,], //banana, apple, grape
stack: "monday"
},
{
name: "i_value_n",
data: [2.9, 3.9, 2.1], //banana, apple, grape
stack: "monday"
},
{
name: 'i_value_u',
data: [0.0, 0.0, 0.0], //banana, apple, grape
stack: "monday"
}
// and the same goes for the wednesday and friday
]
在我的查询中,i_value_p
,i_value_n
,i_value_u
始终是固定的列,不会改变。水果的天数和天数可能会有所不同。
现在我的问题是:在php
中,如何将mysql
的输出转换为array
,它(在执行json_encode
之后)会为我提供所需的{ {1}}输出。
我对json
查询的php
代码:
mysql
我已经开始做某件事,但是我无法弄清楚:
$stmt = $dbdto->prepare("CALL testSO(?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param('iiiiissi', $val1, $val2, $val3, $val4, $val5, $val6, $vl7, $val8);
$stmt->execute();
$result = $stmt->get_result();
$data = array();
while ( $row = $result->fetch_assoc() ) {
$data[] = $row;
}
echo json_encode($data, JSON_PRETTY_PRINT);
(显然)这还没有给我任何结果。
对此有何想法?
答案 0 :(得分:2)
<?php
$json = '[
{
"stack": "monday",
"name": "banana",
"i_value_p": "1.1",
"i_value_n": "2.9",
"i_value_u": "0.0"
},
{
"stack": "monday",
"name": "apple",
"i_value_p": "1.5",
"i_value_n": "3.9",
"i_value_u": "0.0"
},
{
"stack": "monday",
"name": "grape",
"i_value_p": "1.1",
"i_value_n": "3.1",
"i_value_u": "0.0"
},
{
"stack": "wednesday",
"name": "banana",
"i_value_p": "2.4",
"i_value_n": "6.0",
"i_value_u": "0.0"
}
]';
$data = json_decode($json);
$arr = ["i_value_p", "i_value_n", "i_value_u"];
$row_array = array();
foreach ($data as $item => $obj) {
$row_array[$obj->stack]['i_value_p'][] = $obj->i_value_p;
$row_array[$obj->stack]['i_value_n'][] = $obj->i_value_n;
$row_array[$obj->stack]['i_value_u'][] = $obj->i_value_u;
}
$newdata = array();
foreach ($row_array as $stack => $values) {
foreach ($values as $key => $value) {
$newdata[] = array(
'stack' => $stack,
'data' => $value,
'name' => $key,
);
}
}
print(json_encode($newdata));
答案 1 :(得分:1)
我敢肯定有解决问题的简便方法。这可能对您有帮助,不确定所需的输出是否可能是您想要的输出。如果没有,您可以设计类似的产品。
$data = '[
{
"stack": "monday",
"name": "banana",
"i_value_p": "1.1",
"i_value_n": "2.9",
"i_value_u": "0.0"
},
{
"stack": "monday",
"name": "apple",
"i_value_p": "1.5",
"i_value_n": "3.9",
"i_value_u": "0.0"
},
{
"stack": "monday",
"name": "grape",
"i_value_p": "1.1",
"i_value_n": "3.1",
"i_value_u": "0.0"
},
{
"stack": "wednesday",
"name": "banana",
"i_value_p": "2.4",
"i_value_n": "6.0",
"i_value_u": "0.0"
},
{
"stack": "wednesday",
"name": "apple",
"i_value_p": "3.0",
"i_value_n": "7.6",
"i_value_u": "0.0"
},
{
"stack": "wednesday",
"name": "grape",
"i_value_p": "2.3",
"i_value_n": "6.0",
"i_value_u": "0.0",
"fill_color": "#0B62A4"
},
{
"stack": "friday",
"name": "banana",
"i_value_p": "2.2",
"i_value_n": "6.5",
"i_value_u": "0.0"
},
{
"stack": "friday",
"name": "apple",
"i_value_p": "3.0",
"i_value_n": "7.9",
"i_value_u": "0.0"
},
{
"stack": "friday",
"name": "grape",
"i_value_p": "2.0",
"i_value_n": "5.4",
"i_value_u": "0.0"
}
]'; //original JSON
newData(json_decode($data, true)); // call newData function
function newData($data)
{
$newData = array(); // new array
$helper_array = array('p', 'n', 'u'); // different chars
$c = 0; // counter to 3
for ($i = 0; $i < sizeof($data); $i++) {
array_push($newData, array(
'data' => array(
(float) $data[$i * $c]["i_value_" . $helper_array[$c]],
(float) $data[$i * $c + 1]["i_value_" . $helper_array[$c]],
(float) $data[$i * $c + 2]["i_value_" . $helper_array[$c]],
),
'stack' => $data[$i]["stack"],
'name' => array_search($data[$i]["i_value_" . $helper_array[$c++]], $data[$i]),
));
if ($c === 3) {$c = 0;} // once $c reaches to 3, it would set it back to zero
}
//var_dump(json_encode($newData)); //view desired output
return json_encode($newData);
}
[
{
"data": [
1.1,
1.5,
1.1
],
"stack": "monday",
"name": "i_value_p"
},
{
"data": [
3.9,
3.1,
6
],
"stack": "monday",
"name": "i_value_n"
},
{
"data": [
0,
0,
0
],
"stack": "monday",
"name": "i_value_u"
},
{
"data": [
1.1,
1.5,
1.1
],
"stack": "wednesday",
"name": "i_value_p"
},
{
"data": [
7.6,
6,
6.5
],
"stack": "wednesday",
"name": "i_value_n"
},
{
"data": [
0,
0,
0
],
"stack": "wednesday",
"name": "i_value_u"
},
{
"data": [
1.1,
1.5,
1.1
],
"stack": "friday",
"name": "i_value_p"
},
{
"data": [
7.9,
5.4,
0
],
"stack": "friday",
"name": "i_value_n"
},
{
"data": [
0,
0,
0
],
"stack": "friday",
"name": "i_value_u"
}
]