0

我需要以人类可读的格式显示当前记录状态。在我的数据库中,我有一个 int 字段,所以记录可能有状态 1、2、3、4 等

我写了一些代码来向用户显示当前状态:

<?php 
// code to retrieve current status from DB
// ...


if ($status == '1') {
    echo "Current status: Active";
}
if ($status == '2') {
    echo "Current status: Pending";
}
    if ($status == '3') {
    echo "Current status: Inactive";
}

// etc..

?>

这段代码看起来很丑陋,但我不知道如何重构它以使其更有效并且没有无限系列的条件。

4

5 回答 5

5

做一个数组:

$statvalue=array(1=>'Active',2=>'Pending',3=>'Inactive');
echo("Current status: {$statvalue[$status]}");
于 2012-12-10T12:33:53.857 回答
4

最好用数组解决这个问题:

function foo($status) {
    $strings = array(
        '1' => "Current status: Active",
        '2' => "Current status: Pending";
        '3' => "Current status: Inactive";
    );

    return $strings[$status];
}

语法要短得多,您可以在以后通过向数组添加键来扩展它。

于 2012-12-10T12:34:34.207 回答
2

试试Switch语句

switch($status){
  case '1':
   echo "Current status: Active";
   break;

  case '2':
    echo "Current status: Pending";
    break;

 case '3':
    echo "Current status: Inactive";
   break;
 default:
   echo "i is not equal to  1,2 or 3";
}

删除,因为。更好的方法是JamWaffles 的回答

于 2012-12-10T12:32:26.963 回答
2

您可以创建一个引用状态的数组:

<?php
$status_cases = ['active', 'pending', 'inactive'];

echo "Current status: ". $status_cases[$status - 1];
于 2012-12-10T12:34:46.393 回答
1

你可以做很多事情来改善这一点。

首先,许多开发人员更喜欢使用常量值进行比较,如下所示:

if ('1' == $status) {

这使得意外使用赋值运算符(“=”)而不是相等运算符(“==”)更难,这往往会产生有趣的错误。

其次,正如 MortenSickel 和 Thomas Ruiz 所写,用查找替换这种语句是个好主意。MortenSickel 的答案更好,因为这意味着您可以在数组中有间隙,并且不必用任意整数位置来协调您的数组总体 - 明确总是更好。

然而,我的建议是将状态描述放入数据库中 - 可能在多个位置(填充数据库的代码、读取它的代码、报告等)需要此信息,并在整个数据库中进行协调多个代码位置听起来是个坏主意。

于 2012-12-10T12:42:28.547 回答