【问题标题】:Simplify multiple if statements简化多个 if 语句
【发布时间】:2015-01-26 06:08:33
【问题描述】:

我正在用 PHP 构建一个用户模块。它读取基于文本的用户类型并分配一个数值来管理报表查看权限:

if ($usr_type == "Architect"){ $usr_rights = 0; }
if ($usr_type == "Director"){ $usr_rights  = 1; }
if ($usr_type == "Manager"){ $usr_rights  = 2; }
if ($usr_type == "Associate"){ $usr_rights  = 3; }
if ($usr_type == "Assistant"){ $usr_rights  = 4; }
if ($usr_type == "External"){ $usr_rights  = 5; }

有没有更简单、更优雅的方法来做到这一点?

【问题讨论】:

  • 仅供参考:如果您还没有看过它,您可以在这里参观:stackoverflow.com/tour 并了解该网站的运作方式!

标签: php if-statement


【解决方案1】:

您可以使用 switch() 来执行 if 工作。

switch($usr_type) {
    case "Architect":
        $usr_rights = 0;
    break;
    case "Director":
        $usr_rights  = 1;
    break;
    case "Manager":
        $usr_rights  = 2;
    break;
    case "Associate":
        $usr_rights  = 3;
    break;
    case "Assistant": 
        $usr_rights  = 4;
    break;
    case "External":
        $usr_rights  = 5;
    break;
}

或者使用数组。

$valid_types = array(
                "Architect" => 0,
                "Director" => 1,
                "Manager" => 2,
                "Associate" => 3,
                "Assistant" => 4,
                "External" => 5
            );

if(isset($valid_types[$usr_type])) {
    $usr_rights = $valid_types[$usr_type];
}

【讨论】:

  • 关联数组确实是这里的最佳选择
【解决方案2】:

我看到与您当前的解决方案不同的 2 个解决方案。

1。像这样做一个 switch 语句:

switch($usr_type) {

    case "Architect":
        $usr_rights = 0;
    break;

    case "Director":
        $usr_rights = 1;
    break;

    //...

}

有关switch() 的更多信息,请参阅手册:http://php.net/manual/en/control-structures.switch.php

2。或者创建一个数组并像这样在其中搜索:

$arr = array(0 => "Architect", 1 => "Director", 2 => "Manager", 3 => "Associate", 4 => "Assistant", 5 => "External");           

if(array_search($usr_type, $arr) !== false)
    $usr_rights = array_search($usr_type, $arr);

【讨论】:

    【解决方案3】:

    您需要使用switch statement

    switch($usr_type) {
    
        case "Architect":
            $usr_rights = 0;
            break;
    
        case "Director":
            $usr_rights = 1;
            break;
        case "Manager":
            $usr_rights = 2;
    
        etc..
    
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用数组函数array_map。如果我们认为“建筑师”、“导演”等是关键。然后我们可以使用映射结构来组合键和它们的值。

      <?php
      $usr_rights = array(0, 1, 2, 3, 4, 5);
      $usr_types = array("Architect", "Director", "Manager", "Associate", "Assistant","External");
      $c = array_combine($usr_types,$usr_rights);
      print_r($d);
      
      // Test
      echo $c["Architect"]; // output: 0
      ?>
      

      查看文档:http://php.net/manual/en/function.array-map.php

      【讨论】:

      猜你喜欢
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多