php - 在 result_array() 中解码数据库结果中存储的 JSON 值
问题描述
我想从存储在 db 中的 json 中提取值,但我无法弄清楚。这是我的数据库的样子:
+-------------------+-------------------------------------------------+---------------------+---------------------+
| refid | kepribadian | jam_mulai | jam_selesai |
+-------------------+-------------------------------------------------+---------------------+---------------------+
| GAD25D335B0F1DE3B | {"Introversion":"53.3%","Extroversion":"46.7%"} | 2019-08-09 01:16:00 | 2019-08-09 01:19:46 |
| GAD25D32DAE90578A | {"Introversion":"63.3%","Extroversion":"34.7%"} | 2019-08-09 08:55:47 | 2019-08-09 08:56:48 |
+-------------------+-------------------------------------------------+---------------------+---------------------+
这是我的模型:
public function filter_hasil_mbti($search, $limit, $start, $order_field, $order_ascdesc)
{
$sql = $this->db->select('a.id AS id, a.refid AS refid, CONCAT(b.firstname," ",b.lastname) AS fullname, a.kepribadian AS kepribadian, a.jam_mulai AS jam_mulai, a.jam_selesai AS jam_selesai, a.percentage AS percentage')
->from('jawaban_mbti as a')
->join('registrasi_baru as b', 'a.refid=b.refid', 'left')
->like('a.refid', $search)
->or_like('b.firstname', $search)
->or_like('b.lastname', $search)
->or_like('a.kepribadian', $search)
->or_like('a.jam_mulai', $search)
->or_like('a.jam_selesai', $search)
->order_by($order_field, $order_ascdesc)
->limit($limit, $start)
->get()->result_array();
return $sql;
}
所以,我可以访问列 kepribadian json 作为键并将其全部存储在 result_array() 我该怎么做?
谢谢你。
更新
这是我的控制器:
public function ajax_jawaban_mbti()
{
$search = $_POST['search']['value'];
$limit = $_POST['length'];
$start = $_POST['start'];
$order_index = $_POST['order'][0]['column'];
$order_field = $_POST['columns'][$order_index]['data'];
$order_ascdesc = $_POST['order'][0]['dir'];
$sql_total = $this->mhasil->count_all_Soal('jawaban_mbti');
$sql_data = $this->mhasil->filter_hasil_mbti($search, $limit, $start, $order_field, $order_ascdesc);
$sql_filter = $this->mhasil->count_filter_hasil_mbti($search);
//print_r($sql_data);die;
$callback = array(
'draw' => $_POST['draw'],
'recordsTotal' => $sql_total,
'recordsFiltered' => $sql_filter,
'data' => $sql_data,
);
//header('Content-Type: application/json');
echo json_encode($callback);
}
解决方案
您可以使用 json_decode 将其转换为如下数组:
例子:
$json = '{"Introversion":"53.3%","Extroversion":"46.7%"}';
$array = json_decode($json)
var_dump($array);
我建议将变量的名称从 $sql 更改为 $results 因为您返回的是数组而不是 sql
更新1:
foreach ($sql as $key => $val) {
// you can add in the second argument of json_decode 1 to have a array instead of a object.
if(isset($val['kepribadian']))
$sql[$key]['kepribadian'] = json_decode($val['kepribadian']);
}
结果将是这样的:
Array
(
[0] => Array
(
[kepribadian] => stdClass Object
(
[Introversion] => 53.3%
[Extroversion] => 46.7%
[Sense] => 66.7%
[Intuition] => 33.3%
[Thingking] => 46.7%
[Feeling] => 53.3%
[Judging] => 66.7%
[Perceiving] => 33.3%
)
)
[1] => Array
(
[id] => 1337
[refid] => GAD25D335B0F1DE3B
[fullname] => Ravhi Rizaldi
[kepribadian] =>
[jam_mulai] => 2019-08-09 01:16:00
[jam_selesai]] => 2019-08-09 01:19:46
)
)
推荐阅读
- java - 选项卡中的 TestNG 并行 DataProvider
- vb.net - 无法在 VB.NET 中加载 Crystal 报表
- javascript - 溢出-x 或 translateX 错误,我该如何解决?
- php - 如何在php中比较2个数组的值并输出差异
- c# - 为什么要为最简单的单例实现提供私有字段?
- angular-translate - fread 提示
- swift - 加载视图后更新页面中的内容
- time - Kotlin中的Hashset toList()时间复杂度,它是否恒定?
- arduino - Arduino:如何将纪元以毫秒为单位转换为纪元
- r - 使用 levelplot 或 spplot 调整颜色键/颜色条/图例与绘图之间的间隙