我正在从数据库中检索一个整数,该整数在输出时应对应于文本字符串。
$sql = ('SELECT drinking, smoking FROM users WHERE id = ?')
$q = $this->db->query($sql, $this->session->userdata('user_id'));
if ($q->num_rows() === 1) {
$userobject = $q->row();
}
对于饮酒可能得到1,对于吸烟可能得到2。然后,我需要一个函数将该整数转换为相应的字符串。例如,"只在聚会上喝酒"用于喝酒,"我不吸烟"用于吸烟。
我希望只有一个函数可以处理所有的属性。
我正在考虑这样做:
$userobject->drinking = number_to_text($userobject->drinking);
然后有这样一个函数:
public function number_to_text()
{
}
但是由于这个函数将处理饮酒和吸烟(以及其他),那么我需要获得属性的名称以获得正确的字符串。
怎么做呢?
希望有人能帮助我(理解我)。如果不能这样做,我愿意建议用另一种方法来做。
提前致谢
根据你在评论中对这个问题的要求,我提出了我的建议,然而,经过重新思考,有一个更好的解决方案,你可以在下面找到。
首先,正如我的评论
您可以简单地将活动作为参数传递,例如将您的函数声明为
function number_to_text($value, $type_of_activity){
switch ($type_of_activity){
case 'drinking':
switch($value){
case 1: return "I'm drinking a lot"; break;
case 2: return "I've never tasted alcohol, I'm too young for that"; break;
//
} // switch($value)
break;
case 'smoking':
switch($value){
case 1: return 'I smoke as a steam engine'; break;
case 2: return 'I saw once a smoke and since then I keep away from it'; break;
//
} // switch($value)
break;
} // switch $type_of_activity
return ''unknown';
}
但是…
正如你所看到的,这是一个相当复杂的语句。
第二个,比较简单的
您可以创建一个包含所有文本的数组,例如:
$activities['drinking'][1] = "I'm drinking a lot";
$activities['drinking'][2] = "I've never tasted alcohol, I'm too young for that";
$activities['smoking'][1] = "I smoke as a steam engine";
$activities['smoking'][2] = "I saw once a smoke and since then I keep away from it";
,用
命名$activity = 'drinking';
$userobject->{$activity} = $activities[$activity][$userobject->{$activity}];
使用Switch case并将您的case放入该函数中。看,我已经把它变成了一个数组响应,所以我们的属性将是一个键,值将是你想要的字符串。
public function number_to_text($text)
{
switch($text) {
case 1:
$arr['property'] = 'drinking';
$arr['val'] = "Drinking at parties only";
return $arr;
break;
}