CodeIgniter多维数组存储在mysql数据库中的单列

时间:2017-06-10 16:32:59

标签: php mysql codeigniter multidimensional-array

我正在尝试将此数据存储在数据库中但我收到错误。如何解决这个问题?

我想简单地将多维数组存储在一列中。

$data = array(
            '2017' => array(
                '6' => array(
                    '10' => array(
                        'count' => 76
                    ),
                ),
            ),
        );

$getdata = $this->view_count->setView($data);

模型

public function setView($data)
    {
        $setData = $this->db->where('short', 'honwl')->update('ci_links', $data['view_count']);
        return $setData;
    }

我得到的错误 遇到PHP错误

严重性:注意

消息:未定义的索引:view_count

文件名:models / View_count.php

行号:14

回溯:

文件:C:\ wamp \ www \ blog \ application \ models \ View_count.php 行:14 功能:_error_handler

文件:C:\ wamp \ www \ blog \ application \ controllers \ Dashbord.php 行:52 功能:setView

文件:C:\ wamp \ www \ blog \ index.php 行:315 功能:require_once

发生数据库错误

你必须使用" set"更新条目的方法。

文件名:C:/wamp/www/blog/system/database/DB_query_builder.php

行号:1864

2 个答案:

答案 0 :(得分:0)

如消息所示,您没有密钥$data['view_count'],但您的值为$data[2017][6][10]['count']。我认为这些日期是动态更改的,因此您需要通过键count获取内部数组的值。 如果您的数组始终具有相似的键,即$data[year][month][day][count],则可以使用this answer中的代码(位修改)来获取该键值。放入你的模型

private function getCount($arr, $search)
{
    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 
    foreach($iterator as $key => $value) {
        if($search == $key && $value !== '') {
            return $value;
        }
    }
    return false;
}

然后在您的第一个方法中使用通过此函数过滤的值:

public function setView($data)
{
    $count = $this->getCount($data, 'count');

    if ($count !== false) {
        $setData = $this->db->where('short', 'honwl')->update('ci_links', $count);
        return $setData;
    }
    return false;
}

答案 1 :(得分:0)

根据您的示例代码,您可以将数组数据编码为JSON以保存到列,然后通过解码返回:

<强>控制器:

$data = array(
            '2017' => array(
                '6' => array(
                    '10' => array(
                        'count' => 76
                    ),
                ),
            ),
        );

$getdata = $this->view_count->setView($data);
$data = $this->view_count->getView();

<强>型号:

public function setView($data)
{
    $data = json_encode($data);
    $setData = $this->db->where('short', 'honwl')->update('ci_links', array('column_name'=>$data));
    return $setData;
}

public function getView($data)
{
    $row = $this->db->where('short', 'honwl')->get('ci_links')->row();
    return json_decode($row->column_name, true);
}

column_name取决于保存数组数据的表的列名。