首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解码数据库中存储的JSON值将导致result_array()

解码数据库中存储的JSON值将导致result_array()
EN

Stack Overflow用户
提问于 2019-08-09 12:59:06
回答 3查看 126关注 0票数 0

我想从存储在db中的json中提取值,但我找不到它。下面是我的数据库:

代码语言:javascript
复制
+-------------------+-------------------------------------------------+---------------------+---------------------+
| 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 |
+-------------------+-------------------------------------------------+---------------------+---------------------+

这是我的模特

代码语言:javascript
复制
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()中,我如何做到这一点?

谢谢。

更新

这是我的控制器:

代码语言:javascript
复制
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);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-09 13:04:36

您可以使用json_decode将其转换为如下所示的数组:

示例:

代码语言:javascript
复制
 $json = '{"Introversion":"53.3%","Extroversion":"46.7%"}';
 $array = json_decode($json)
 var_dump($array);

我建议将变量的名称从$sql更改为$results,因为您返回的是数组,而不是sql。

更新1:

代码语言:javascript
复制
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']);
}

结果是这样的:

代码语言:javascript
复制
    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
        )

)
票数 1
EN

Stack Overflow用户

发布于 2019-08-09 13:18:15

我猜您将从select语句中获得一个数据数组,其中"kepribadian“列是值之一。因此,您需要做的是将该列从JSON解码为PHP数组。

原则上像这样,(没有测试)

代码语言:javascript
复制
...
$sqlrec = filter_hasil_mbti(...  ...);
$phpArr = json_decode($sqlrec['kepribadian']);
...
票数 0
EN

Stack Overflow用户

发布于 2019-08-09 13:21:37

你可以试试

代码语言:javascript
复制
<?php
    $json_decoded = json_decode(array_column($rsult, "kepribadian"), true);
 ?>

如果在true中添加json_decode()参数,结果将作为PHP数组给出。

玩得开心:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57430598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档