【问题标题】:How to save this JSON stringified array into database? [duplicate]如何将此 JSON 字符串化数组保存到数据库中? [复制]
【发布时间】:2017-10-19 07:45:57
【问题描述】:

我有一个提交字符串化 JSON 数组的表单。这是数据示例:

"[{'name':'i_cp_nm','value':'1'},{'name':'i_cp_tp','value':'2'},{'name':'i_cp_mb','value':'3'},{'name':'i_cp_em','value':'4'},{'name':'i_cp_jb','value':'5'},{'name':'i_cp_nt','value':'6'},{'name':'i_cp_nm','value':'7'},{'name':'i_cp_tp','value':'8'},{'name':'i_cp_mb','value':'9'},{'name':'i_cp_em','value':'10'},{'name':'i_cp_jb','value':'11'},{'name':'i_cp_nt','value':'12'}]";

这是所需插入数据的样子:

i_cp_jd     i_cp_nm     i_cp_tp     i_cp_mb     i_cp_em     i_cp_jb     i_cp_nt
    xxx           1           2           3           4           5           6
    xxx           7           8           9          10          11          12

这是当前循环,不知道对不对:

$arr_cp = //arr_data



    foreach($arr_cp as $val_cp){
        $dt_cp['i_cp_jd']   = $this->input->post('i_v_id');

        //didn't know what to do here

        $this->model_vendor->insert_vendor_pic($dt_cp);

    }

插入方法:

function insert_vendor_pic($dt_cp){
    $query = $this->db->insert('vendordetail_pic',$dt_cp);
    return $query;
}

【问题讨论】:

  • insert_vendor_pic()函数的邮政编码
  • @usmanikram 我已经添加了
  • @Shota 请使用 json_decode($arr_cp, TRUE) 因为它是 JSON 数据

标签: php arrays json


【解决方案1】:

你所要做的就是使用json_decode:

$arr_cp = json_decode($yourJsonData, true);

【讨论】:

  • 抱歉回复慢。但是,我该如何循环呢?
【解决方案2】:

试试这个函数来准备/转换你的输入到矩阵:

function prepareData($rawData) {
    $rawData = str_replace("'", '"', $rawData);

    $data = array();
    foreach(json_decode($rawData, true) as $d) {
            if (!isset($data[$d['name']])) {
                $data[$d['name']] = array();
            }
            $data[$d['name']][] = $d['value'];
    }

    $rows = array();
    foreach ($data as $col => $values) {
        foreach ($values as $i => $v) {
            if (!isset($rows[$i])) {
                $rows[$i] = array();
            }
            $rows[$i][$col] = $v;
        }
    }

    return $rows;
}

转换:

$rawData = "[{'name':'i_cp_nm','value':'1'},{'name':'i_cp_tp','value':'2'},{'name':'i_cp_mb','value':'3'},{'name':'i_cp_em','value':'4'},{'name':'i_cp_jb','value':'5'},{'name':'i_cp_nt','value':'6'},{'name':'i_cp_nm','value':'7'},{'name':'i_cp_tp','value':'8'},{'name':'i_cp_mb','value':'9'},{'name':'i_cp_em','value':'10'},{'name':'i_cp_jb','value':'11'},{'name':'i_cp_nt','value':'12'}]";
print_r(prepareData($rawData));

输出:

Array
(
    [0] => Array
        (
            [i_cp_nm] => 1
            [i_cp_tp] => 2
            [i_cp_mb] => 3
            [i_cp_em] => 4
            [i_cp_jb] => 5
            [i_cp_nt] => 6
        )

    [1] => Array
        (
            [i_cp_nm] => 7
            [i_cp_tp] => 8
            [i_cp_mb] => 9
            [i_cp_em] => 10
            [i_cp_jb] => 11
            [i_cp_nt] => 12
        )

)

最后,您可以以任何您喜欢的方式简单地将这些数据插入数据库。

【讨论】:

  • 这行得通。但是,有点复杂。这可以简化吗?
  • 我认为是的。试试:)
【解决方案3】:

如果您想系统地执行此操作,那么您应该使用适当的 JSON 解析器/反序列化器来创建域的实例或您应该从该表单数据创建的任何内容,并将这些实例插入数据库中。

【讨论】:

    【解决方案4】:

    如果您想系统地执行此操作,那么您应该使用适当的 JSON 解析器/反序列化器来创建域的实例或您应该从该表单数据创建的任何内容并将其插入 DB。

    【讨论】:

      【解决方案5】:

      json格式的数据,所以需要使用json解码成数组

      $arr_cp = json_decode($arr_cp, TRUE);
      

      然后在 foreach 循环中执行 $arr_cp

      foreach($arr_cp as $val_cp){
              $dt_cp['i_cp_jd']   = $this->input->post('i_v_id');
      
              //didn't know what to do here
      
              $this->model_vendor->insert_vendor_pic($dt_cp);
      
          }
      

      【讨论】:

        猜你喜欢
        • 2014-02-28
        • 2018-09-21
        • 2012-07-04
        • 2015-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-09
        • 1970-01-01
        相关资源
        最近更新 更多