PHP数组序列化键值CodeIgniter缓存

PHP数组序列化键值CodeIgniter缓存,php,codeigniter,Php,Codeigniter,我有表名“首选项”列(键、值) 我在codeigniter中使用缓存 看看这个: $pref = $this->ci->db->get('preferences')->result(); $this->ci->cache->save('preferences', $pref, 30000); 保存缓存: (3)s:3:s:3:s:4:4:3:s:3:3:“ttl”i:3万;s:4:“数据”a:87:{i:0;0:0:0:O:8:“stdcclass

我有表名“首选项”列(键、值)

我在codeigniter中使用缓存

看看这个:

$pref = $this->ci->db->get('preferences')->result();

$this->ci->cache->save('preferences', $pref, 30000);
保存缓存:

(3)s:3:s:3:s:4:4:3:s:3:3:“ttl”i:3万;s:4:“数据”a:87:{i:0;0:0:0:O:8:“stdcclass”:2:{s:3:1:3:1:3:3:3:1:{s:1:3:a:a:a:a:1:a:a:a:1:a:a:a:1:a:a:1:a:1:a:a:1:1:a:a:1:1:2::::::,2:2:{s:2:{s:2:{s:2:{s:2:{s:s:s:s:s:s:s:s:s:3:3:3:3:3:3:2:3:3:3:3:3:3:3:3:“关键:3:2:::::

调用缓存使用:

$data = $this->ci->cache->get('preferences');

print_r($data);
输出:

Array( 
            [0] => Array
            (
                [key] => site_title
                [value] => CARS Big
            )

        [1] => Array
            (
                [key] => forum_title
                [value] => CARS Big forum
            )

        [2] => Array
            (
                [key] => forum_per_page
                [value] => 10
            )

        [3] => Array
            (
                [key] => forum_section_per_page
                [value] => 10
            )

        [4] => Array
            (
                [key] => forum_replies_per_page
                [value] => 5
            )

        [5] => Array
            (
                [key] => forum_can_add_pictures
                [value] => 1
            )

        [6] => Array
            (
                [key] => forum_can_add_poll
                [value] => 1
            )

        [7] => Array
            (
                [key] => forum_can_set_time_to_close
                [value] => 1
            )

        [8] => Array
            (
                [key] => forum_can_set_replies_to_close
                [value] => 1
            )

        [9] => Array
            (
                [key] => forum_auto_active_topics
                [value] => 1
            )

        [10] => Array
            (
                [key] => market_title
                [value] => market CARS Big
            )

        [11] => Array
            (
                [key] => market_per_page
                [value] => 5
            )

        [12] => Array
            (
                [key] => market_section_per_page
                [value] => 3
            )


    )
如何使列的内容键是键 列值就是内容 这样地: 我需要$data['site_title']来打印:汽车大 以便调用此函数
**

您不能,因为缓存保存实现是一个固定的过程。只有在您创建自己的缓存实现时才可以

但是您可以像这样执行返回函数

function pref($key=NULL)
{
    // call pref data
    $data = $this->ci->cache->get('preferences');
    if( ! $data ) {
        // cache not present request new
        $data = $this->ci->db->get('preferences')->result();
        $this->ci->cache->save('preferences', $data, 30000);
    }

    // loop
    foreach( $data as $preferences ) {
        if( isset( $preferences['key'] ) && $preferences['key'] == $key ){
            return $preferences['value'];
        }
    }
    return false;
}

基本上,您希望循环值并重新分配键,这样类似的事情就可以工作了:

// loop through data
foreach($data as $k=>$v)
{
    // unset the original array item to get rid of $data[0], $data[1], $data[2] as so forth
    unset($data[$k]);

    // $k is a digit (0,1,2,3,4,5,....)
    // $v is the array of values so $v['key'] is 'site_title' and $v['value'] is 'CARS Big'
    // so essentially we are doing $data['site_title'] = 'CARS Big'; in the line below
    $data[$v['key']] = $v['value'];
}

谢谢你的尝试:)它坏了吗?我没有测试它或检查语法错误,哈哈。很高兴你得到了答案!真的,这是个聪明的主意:)很高兴听到它帮助了你:)
function pref($key=NULL)
{
    // call pref data
    $data = $this->ci->cache->get('preferences');
    if( ! $data ) {
        // cache not present request new
        $data = $this->ci->db->get('preferences')->result();
        $this->ci->cache->save('preferences', $data, 30000);
    }

    // loop
    foreach( $data as $preferences ) {
        if( isset( $preferences['key'] ) && $preferences['key'] == $key ){
            return $preferences['value'];
        }
    }
    return false;
}
// loop through data
foreach($data as $k=>$v)
{
    // unset the original array item to get rid of $data[0], $data[1], $data[2] as so forth
    unset($data[$k]);

    // $k is a digit (0,1,2,3,4,5,....)
    // $v is the array of values so $v['key'] is 'site_title' and $v['value'] is 'CARS Big'
    // so essentially we are doing $data['site_title'] = 'CARS Big'; in the line below
    $data[$v['key']] = $v['value'];
}