2011-08-02 17 views
0

如何在switch方法中写这个if condition如何将`if condition`转换为`switch`方法

if($k != 'pg_id' && $k != 'pg_tag' && $k != 'pg_user') 
{ 
    $result = $connection->run_query($sql,array(...)); 
} 

......吗?

switch($k) 
{ 
case 'pg_id': false; 
case 'pg_tag': false; 
case 'pg_user': false; 
default: 
    $result = $connection->run_query($sql,array(...)); 

} 

编辑:

对不起,我想我没有说清楚前面,下面是我要如何使用它,

$editable_fields = array(
    'pg_id', 
    'pg_url', 
    'pg_title', 
    'pg_subtitle', 
    'pg_description', 
    'pg_introduction', 
    'pg_content_1', 
    'pg_content_2', 
    'pg_content_3', 
    'pg_content_4', 
    'pg_backdate', 
    'pg_highlight', 
    'pg_hide', 
    'pg_cat_id', 
    'ps_cat_id', 
    'parent_id', 
    'tmp_id', 
    'usr_id' 
); 

$sql_pattern = array(); 

foreach($editable_fields as $key) 
{ 
    if($key != 'pg_id' && $key != 'pg_tag' && $key != 'pg_user' ) $sql_pattern[] = "$key = ?"; 
} 

,你可以看到我反复那里的情况 -

if($key != 'pg_id' && $key != 'pg_tag' && $key != 'pg_user' ) 

并且它可能会在某个时间长。

+0

这种转折,我不知道你可以转换。 –

+1

'in_array'不会更具可读性/便携性/可配置性吗? – Wrikken

+1

@Wrikken你是对的,但我建议'!in_array' :) – dpp

回答

0

(从先前的问题借用我认为衍生出这一个 - A short-cut to update a table row in the database?

$editable_fields = array(
    'pg_url' , 
    'pg_title' , 
    ... 
); 
/* These are the fields we will use the values of to match the tuple in the db */ 
$where_fields = array(
    'pg_id' , 
    'pg_tag' , 
    'pg_user' , 
    ... 
); 

$form_values = array(); 
$sql_pattern = array(); 
foreach($editable_fields as $k){ 
    if($k != 'pg_id' 
     && isset($_POST[$k])){ 
    $form_values[$k] = $_POST[$k]; 
    // NOTE: You could use a variant on your above code here, like so 
    // $form_values[$k] = set_variable($_POST , $k); 
    $sql_pattern[] = "$k = ?"; 
    } 
} 
$where_values = array(); 
$where_pattern = array(); 
foreach($where_fields as $k){ 
    if(isset($_POST[$k])){ 
    $where_values[$k] = $_POST[$k]; 
    // NOTE: You could use a variant on your above code here, like so 
    // $form_values[$k] = set_variable($_POST , $k); 
    $where_pattern[] = "$k = ?"; 
    } 
} 

$sql_pattern = 'UPDATE root_pages SET '.implode(' , ' , $sql_pattern).' WHERE '.implode(' , ' , $where_pattern); 

# use the instantiated db connection object from the init.php, to process the query 
$result = $connection->run_query($sql_pattern,array_merge(
    $form_values , 
    $where_values 
    )); 
2

使用break防止贯彻到下一个案例:

switch($k) 
{ 
case 'pg_id': 
case 'pg_tag': 
case 'pg_user': 
    // any match triggers this block; break causes no-op 
    break; 
default: 
    $result = $connection->run_query($sql,array(...)); 
} 

我不知道你为什么要使用,虽然这个switch语句。

如果是为了可读性,可以转而尝试这个办法:

if($k != 'pg_id' && 
    $k != 'pg_tag' && 
    $k != 'pg_user') 
{ 
    $result = $connection->run_query($sql,array(...)); 
} 
+0

对不起,没有说清楚 - 看看我上面的编辑。我认为我可以在那里设置'break',因为它会停止循环.... – laukok

+0

是的,你仍然可以在'foreach'循环中'switch'语句中使用'break'。默认情况下'break'只会跳出最内层的范围。您可以通过在其后添加一定数量的范围(例如'break 2;')来告诉它突破多个范围,但您不希望在此处这样做。 – Ergwun

0

开关条件可能会更快(跳表),有点更容易阅读。你可以跳过休息;如果条件的结果是相同的和改进的语法是使用花括号每个条件内:

switch ($k) 
{ 
case 'pg_id': 
case 'pg_tag': 
case 'pg_user': { 
break; 
} 
default: { 
    $result = $connection->run_query($sql,array(...)); 
} 
} 
+0

为了说明使用大括号是“正确的语法”有点夸张。 –

+0

你的理由是什么?这对我来说也是一个新信息,我喜欢它。 – Bytemain

+0

那么,“正确的语法”是什么意思?最佳做法,_arguably_。广泛?绝对不。 PHP语法的必需和适当的部分?没门。 –