2011-08-02 7 views
0

if conditionswitchメソッドに書き込むにはどうすればよいですか?`if条件 'を` switch`メソッドに変換する方法

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

to ...?

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

} 

EDIT:あなたは、私が繰り返し見ることができるように

私は以下、以前のそれを明確にしなかったと思います申し訳ありませんが、私はそれを使用する方法

$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

(私はこの1つ生成されたと信じて前の質問からの借入 - 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'は最も内側のスコープから抜けるだけです。複数のスコープの後にスコープの数を追加することで(複数のスコープの中からブレークするように指定できますが、ここではそのようにしたくない場合があります)。 – 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構文の必要かつ適切な部分ですか?とんでもない。 –