【问题标题】:Shortening a "for / switch-case"缩短“for / switch-case”
【发布时间】:2010-08-04 17:49:46
【问题描述】:

一个学校系统有 30 所学校。最低的学校代码是 298,最高的是 516。对于每所学校,都会调用相同的流程。到目前为止我采取的方法可以在下面看到。如何缩短此代码?谢谢。

for ( $i = 298; $i <= 516; $i++ )
{
   switch ( $i )
   {
      case 298:
         $c_sch = strval ( $i ) ;
         // call a function
         uf_mem_requester ( $c_sch, $t_mem1, $t_mem2, $t_mem3,
                            $d_year, $d_datadate ) ;
      case 303:
         // etc....etc.....
      case 309:
         // etc....etc.....
      default:
   }
}

【问题讨论】:

  • 298 到 516 之间的每个代码都有一个案例吗?
  • 为什么要迭代超过 200 次?
  • 是的,就是我!我怀疑我的大部分代码都属于 WTF 博物馆。

标签: php switch-statement


【解决方案1】:

不确定我是否理解。 switch 是不是因为 298 和 516 之间的某些 ID 不存在?

那样的话,我会更喜欢

$school_ids = array(
  298, 300, 304, 312, 319, 320, 321, ....... all school IDs that actually exist
);

foreach (school_ids as $school) // a list of all IDs that exist
{
  $c_sch = strval ( $school ) ;
  uf_mem_requester ( $c_sch, $t_mem1, $t_mem2, $t_mem3, d_year, $d_datadate);
}

【讨论】:

  • 和另一个出于同样的原因:-)
  • 嗯,该死的,这比我的尝试更简洁和合理,实际上它不起作用。感谢您的超快响应。
【解决方案2】:
$schoolCodes = array(304, 313 /* etc */ );
foreach($schoolCodes as $code {
     $c_sch = strval ( $code ) ;
     // call a function
     uf_mem_requester ( $c_sch, $t_mem1, $t_mem2, $t_mem3,
                        $d_year, $d_datadate ) ;
}

这是你的意思吗?

【讨论】:

  • 嗯,不是我的意思,而是我需要的。谢谢。
【解决方案3】:

制作学校代码数组:

$schoolCodes =  array( 298, 303, 309 ...... );
foreach( $schoolCodes as $code ) {
    $c_sch = strval ( $i ) ;
    uf_mem_requester ( $c_sch, $t_mem1, $t_mem2, $t_mem3, $d_year, $d_datadate ) ;
    //and so forth...
}

这与遍历代码的效果完全相同,但它更有效,因为您不需要遍历任何不需要的值,并且通过数组更新代码要容易得多条件。 :D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多