PHP:如何缩短代码?

PHP:如何缩短代码?,php,Php,我知道如何为我的问题编写解决方案,我只是对编写解决方案的最短方法感兴趣。这就是问题所在: 我正在解析一个URL,解析可以有3个结果,本地、暂存或生产。我知道它使用的是正则表达式。我在一个名为getServer()的函数中实现了这一点 现在在这个函数中,我返回一个数组,它有3个元素,要么是0,要么是1。如果第一个是1,另外两个是0,这意味着它是一个本地服务器 现在,当我得到那个数组时,我仍然需要写一个if,看看哪个数组元素是1 if($returnArrayFromFunction[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
} 
有没有办法缩短代码


谢谢你的时间

为什么不在
getServer()
中返回一个id号呢

注意:

如果您需要在代码中的其他地方使用这些服务器id,那么通过使用命名约定跟踪哪个id对应于哪个服务器可能会更容易。这还可以使代码更易于阅读,从而更易于调试

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
}
试着

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;
       }
   }
}
试试这个代码

  $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;

   }

不要返回索引值为编码结果的
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();
尽可能短,但很可能会被反对:-)

您的
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
}

为什么函数
getServer()
只返回数组而不是1个值呢?
switch('1'){case$returnArray[0]:/**/;case$returnArray[1]:/**/;…}
?@u mulder:该值应该是什么?@user1856596它可以是整数(0表示本地,1表示暂存,2表示生产)或字符串('local'或'staging'或'production'))@数据顺序类似于yoda开关语句。
 $serverType == SERVER_LOCAL ? doLocal() : $serverType == SERVER_STAGING ? doStaging() : doProduction();
$serverId = getServer();

switch ($serverId) {
  case 0:  // local server
    // Your code
    break;
  case 1:  // testing server
    // Your code
    break;
  case 2:  // live server
    // Your code
}