我们从数据库查询出来的数据一般为数组的形式,而redis是不支持存入数组的。
通常我们首先想到的就是将数组转化为json数据,再将json存入redis,之后取出时再将json转化为php数组。
但将查出的数组数据是不能直接用json_encode()的,因为这样会将一组正常的json最终再通过json_decode()转化,会得到一个包含对象的数组,不是原本的数组,而这样含有对象的数组是没法直接被遍历输出的。
解决方法:给json_encode()、json_decode函数传入第二个参数true,即:json_encode($json,true);json_decode($json,true);默认是false,即对象;true是数组。
这样得到的就都是数组了。
数据结构:
要存入的数组:
E:ProjectlibModelsComplaint.php:476: array (size=69) 'id' => int 103863 'channel' => string 'ios:appstore' (length=12) 'version_code' => string '30400' (length=5) 'source_type' => string 'client' (length=6) 'os' => string 'ios' (length=3) 'app' => string 'sdsgzxz' (length=3) 'inner_app' => string 'dsvvs' (length=3) 'fund_source_name' => string '理财' (length=12) 'fund_loan_order_info' => array (size=1) 0 => array (size=12) 'id' => int 262 'order_number' => string '213' (length=23) 'loan_apply_code' => string '1231' (length=19) 'status_history' => string '0,5,6,7' (length=7) 'status' => string '8' (length=1) 'failed_reason' => null 'funding_time' => null'fund_order_number' => string '12312' (length=23) 'fund_order_status' => string '8' (length=1)
第二个参数默认为false的数据结构:
E:ProjectlibModelsComplaint.php:476: object(stdClass)[17] public 'id' => int 103863public 'os' => string 'ios' (length=3) public 'app' => string 'dasa' (length=3) public 'inner_app' => string 'asda' (length=3) public 'fund_source_name' => string '理财' (length=12) public 'fund_loan_order_info' => array (size=1) 0 => object(stdClass)[18] public 'id' => int 262 public 'order_number' => string '123' (length=23) public 'loan_apply_code' => string '3123' (length=19) public 'status_history' => string '0,5,6,7' (length=7)
当然这是一个栗子,所以数据是对不上的,目的是看看什么对象。
第二个参数是true的情况,返回的就是正常的数组了,就不贴上了。