0

我知道如何为我的问题编写解决方案,我只对编写它的最短方法感兴趣。那就是问题所在:

我正在解析一个 URL,解析可以有 3 个结果,本地、暂存或生产。我弄清楚它使用的是哪个正则表达式。我在一个名为 getServer() 的函数中执行此操作。

现在在该函数中,我返回一个数组,其中包含 3 个元素,它们是 0 或 1。如果第一个是 1,另外两个是 0,这意味着它是一个本地服务器。

现在,当我取回那个数组时,我仍然需要编写一个 if 来查看数组中的哪一个元素是 1。

if($returnArrayFromFunction[0] == '1') {
    // do the stuff for the local server case
} 

if($returnArrayFromFunction[1] == '1') {
    // do the stuff for the staging server case
}

if($returnArrayFromFunction[2] == '1') {
    // do the stuff for the production server case
} 

有什么方法可以缩短该代码吗?

谢谢你的时间!

4

6 回答 6

3

为什么不只返回一个 id 号码getServer()

$serverId = getServer();

switch ($serverId) {
  case 0:  // Local
    // Code
    break;
  case 1:  // Staging
    // Code
    break;
  case 2:  // Production
    // Code
}

笔记:

如果您需要在代码中的其他位置使用这些服务器 ID,则通过使用define(). 这也可以使您的代码更易于阅读,从而更易于调试。

define('SERVER_LOCAL', 0);
define('SERVER_STAGING', 1);
define('SERVER_PRODUCTION', 2);

然后您可以将上述开关替换为以下内容:

switch ($serverId) {
  case SERVER_LOCAL:
    // Code
    break;
  case SERVER_STAGING:
    // Code
    break;
  case SERVER_PRODUCTION:
    // Code
}
于 2013-06-07T06:15:06.507 回答
3

不要返回带有1编码结果的值的索引的数组。定义三个常量

define('SERVER_LOCAL', 1);
define('SERVER_STAGING', 2);
define('SERVER_PRODUCTION', 4);

并从您的代码中返回正确的常量,然后使用 switch 语句

switch($serverType) {
    case(SERVER_LOCAL)::
       DoStuffForLocalServer();
       break;
    case ...

如果简洁是您的目标,请将开关缩短到

 $serverType == SERVER_LOCAL ? doLocal() : $serverType == SERVER_STAGING ? doStaging() : doProduction();

尽可能短,但很可能会被皱眉:-)

于 2013-06-07T06:23:37.200 回答
1

试试这个代码

  $case=array_search(1,$returnArrayFromFunction);
   switch($case)
   {
     0:
     break;
     // do the stuff for the local server case
     1:
     break;
     // do the stuff for the staging server case
     2:
     // do the stuff for the production server case
     break;

   }
于 2013-06-07T06:19:48.957 回答
0

试试喜欢

foreach($returnArrayFromFunction as $key=>$return)
{
   if($return == '1')
   {
       switch($key)
       {
           case '0' : //Stuff at local
                      break;
           case '1' : //Stuff at Staging
                      break;
           case '2' : //Stuff at production
                      break;
       }
   }
}
于 2013-06-07T06:15:15.393 回答
0
$code = join('', $returnArrayFromFunction );
//something like '111' / '010' / '110'

switch( $code ){
  case '111':
     //all values 1
     break;
  case '001':
     //something else
     break;
}  
于 2013-06-07T06:15:32.100 回答
0

您的getServer()函数应该只返回一个值而不是数组。然后使用以下代码:

$serverId = getServer();

switch ($serverId) {
  case 0:  // local server
    // Your code
    break;
  case 1:  // testing server
    // Your code
    break;
  case 2:  // live server
    // Your code
}
于 2013-06-07T06:26:11.060 回答