而status的值分三种情况:1未开始, 2进行中, 3已结束,通常的做法是查询得到二维数据,然后遍历着把status转换成相应文本描述.
个人觉得,如果你喜欢优雅地写代码,那就有必要封装一个快速处理这一问题的函数....
/**
* 表字段转文字说明
* @param unknown $field 字段名
* @param unknown $value 字据值
* @param unknown $default 默认值
* @return string 转换后的结果
*
* $config = array(
* 'addtime'=>array('callback', 'dateformat', array('Y-m-d', 'argA' '$3'=>'@total')),
* 'endtime'=>array('callback', array($this, 'action'), array('$1'=>'fieldA', 'Y-m-d', '$3'=>'fieldB' )),
* )
*/
function toText($field, $config, $value, $default=''){
$data = is_array($value)? $value : array($field => $value);
if(is_array($value)) $value = $data[$field];
if(empty($config[$field])) return $value;
$config = $config[$field];
if($config[0] == 'callback'){
if(!isset($config[2])) $config[2] = array('$1'=>$field);
$args = array();
foreach($config[2] as $key => $arg){
$args[] = is_numeric($key)? $arg : ($key === '@total'? $data : $data[$arg]);
}
$return = call_user_func_array($config[1], $args);
}else{
$return = isset($config[$value])? $config[$value] : $default;
}
return $return;
}
$config = array(
'status'=>array(1=>'1未开始', 2=>'2进行中' 3=>'3已结束')
'addtime'=>array('callback', 'date', array('Y-m-d', 'argA' '$3'=>'@total')),
'endtime'=>array('callback', array($this, 'action'), array('$1'=>'fieldA', 'Y-m-d', '$3'=>'fieldB' )),
);
toText('status', $config, 2, '未知状态');
//可以传一条数据数组
$data = array('stauts'=>2, 'addtime'=>'100', 'fieldN'=>'abc');
toText('status', $config, $data, '未知状态');
//可以用函数/方法$config[2] 代表参数列表,参数依次排列,其中 '$1'这种字段名,表示会被转换成相应字段值.
toText('addtime', $config, $data, '未知状态');基于上述方法,我又加了一个方法,放在模型中
最终代查询代码大致如下:

结果:
最佳答案