1

我正在从我的数据库中检索一个整数,该整数在输出时应该对应于一个文本字符串。

$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()
{

}

但是由于这个函数将同时处理饮酒和吸烟(以及其他),所以我需要获取属性的名称来获取正确的字符串。

怎么可能呢?

希望有人可以帮助我(并理解我)。如果不能以这种方式完成,我愿意接受另一种方式的建议。

先感谢您

4

2 回答 2

2

正如您在对此问题的评论中所要求的那样,我提出了我的建议,但是,在重新考虑之后,您可以在下面找到更好的解决方案。

首先,就像我的评论一样。

您可以简单地将活动作为参数传递,例如将您的函数声明为

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}];

我认为要简单得多。

于 2013-04-12T11:50:10.727 回答
0

使用 Switch 机箱并将您的机箱放入该功能中。请参阅我已将其设为数组响应,因此您的属性将是一个键,值将是您想要的字符串。

public function number_to_text($text)
{
    switch($text) {
        case 1:
        $arr['property'] = 'drinking';
        $arr['val']      =  "Drinking at parties only";
        return $arr;
        break;


}
于 2013-04-12T11:26:31.880 回答