cpass 2012-05-08 14:54:29 3085次浏览 3条回复 0 0 0

CDetailView中有个字段是序列化后的字符串,默认输出是

a:3:{i:0;s:1:"S";i:1;s:1:"C";i:2;s:1:"O";}

如果attributes设置成

array(
  'name'=>'groups',
  'value'=> implode(',',unserialize($model->groups)),
  ),

输出结果是 S,C,O 问题是这个数组值是一个数组的下标,像

array(
'S'=>'Server',
'C'=>'Client',
'O'=>'Option'
)

怎么才能输出 Server,Client,Option 谢谢各位~

  • 回复于 2012-05-08 15:15 举报

    期待指点~望眼欲穿了。:'(

  • 回复于 2012-05-09 15:51 举报

    你可以定义一个函数,处理一下就行了 吧

  • 回复于 2012-05-10 10:54 举报

    在view里写了

    $valueArr=array(
    	'S'=>'Student',
    	'C'=>'Corporate officer',
    	'O'=>'Others',
    );
    function extradata($arr,$valueArr){
    	$ret='';
    	foreach($arr as $v){
    		if($ret){$ret .=',';}
    		$ret .=isset($valueArr[$v])?$valueArr[$v]:'NUL';
    	}
    	return $ret;
    }
    

    CDetailView改为

    array(
    	'name'=>'groups',
    	'value'=>extradata(unserialize($model->groups),$valueArr),
    ),
    

    这样可以输出 Student,Corporate officer,Others 这样虽然怪怪的,但是毕竟算是解决了在view里的显示,回到列表页面,使用了CGridView,自定义函数在这里没用,整个数据在CGridView内部循环处理,现在只能在列表页隐藏这个字段。
    唉,学艺不精~

您需要登录后才可以回复。登录 | 立即注册