有没有一种方法可以在下面的语句中编写更少的代码(因式分解)。在我的例子中,我有一个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]}");