case语句PHP中的代码更少


Less code in case statement PHP

有没有一种方法可以在下面的语句中编写更少的代码(因式分解)。在我的例子中,我有一个webform_client_form_AKEY,其中AKEY变量发生了更改,我的变量在uri中传递(?C==1…)。谢谢

switch ($form_id)
{
case 'webform_client_form_9944':
    $form['#action'] = url('section/client-tool-box/appointment?c=1');          
    break;
case 'webform_client_form_9883':
    $form['#action'] = url('section/client-tool-box/appointment?c=2'); 
    break;
case 'webform_client_form_9884':
    $form['#action'] = url('section/client-tool-box/appointment?c=3');          
    break;
...
}

使用"字典"方法:

$array = array(
    "webform_client_form_9944" => "1",
    "webform_client_form_9883" => "2",
    "webform_client_form_9884" => "3"
);
if (array_key_exists($array, $form_id))
    $form['#action'] = url('section/client-tool-box/appointment?c=' . $array[$form_id]);
else
    $form['#action'] = ""; // default
$urls = array(
  'webform_client_form_9944' => 'section/client-tool-box/appointment?c=1',
  'webform_client_form_9883' => 'section/client-tool-box/appointment?c=2',
   ...
);
$form['#action'] = url($urls[$form_id]);

Ya:

$cat = 0; //0 : default cat
switch ($form_id) {
   case 'webform_client_form_9944': $cat = 1; break;
   case 'webform_client_form_9883': $cat = 2; break;
   case 'webform_client_form_9884': $cat = 3; break;
   ...
}
$form['#action'] = url('section/client-tool-box/appointment?c='.$cat);

您可以尝试这种方式

$form_id= 'webform_client_form_9944';
$cons = 'webform_client_form_';
switch($form_id){
    case $cons.'9944':
        $c = 1;
        break;
    case $cons.'9883':
        $c = 2;
        break;
}
$form['#action'] = url('section/client-tool-box/appointment?c='.$c);

在数组中保留"form_id"到"c"的映射如何?我想这会让它更容易维护。此外,不再有重复的代码:

<?php
$form_id = 'webform_client_form_9944';
$forms = array(
    '9944' => '1',
    '9883' => '2',
    '9884' => '3'
);
$id = str_replace('webform_client_form_', '', $form_id);
if (isset ($forms[$id])) {
    $form['#action'] = url('section/client-tool-box/appointment?c=3');
}

我认为在这里写更少的代码并不重要。但我想,如果你把数据抽象出来,代码会更容易维护:

// Untested
$id_to_c = array(
    9944 => 1,
    9883 => 2,
    9884 => 3,
);
if( preg_match('^webform_client_form_(''d)$', $form_id, $matches) ){
    if( array_keys_exists($matches[1], $id_to_c) ){
        $form['#action'] = url('section/client-tool-box/appointment?c=' . rawurlencode($id_to_c[$matches[1]]));   
    }
}

您可以执行以下操作:

$formid = end(explode('_', $form_id));
$map = array(9944=>1, 9883=>2, 9844=>3, ...);
$form['#action'] = url("section/client-tool-box/appointment?c={$map['webform_client_form_'.$map[$formid]}");