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

status を参照する配列を作成できます。

<?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 に答える