Как преобразовать `if condition` в метод` switch` - PullRequest
0 голосов
/ 02 августа 2011

Как я могу написать этот 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(...));

}

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'  )

и в какой-то момент он может вырасти долго.

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Используйте 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 голосов
/ 03 августа 2011

(Заимствование из предыдущего вопроса, который, как мне кажется, породил этот вопрос - Быстрый доступ для обновления строки таблицы в базе данных? )

$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
    ));
0 голосов
/ 02 августа 2011

Условие переключения, вероятно, будет быстрее (таблица переходов) и немного легче для чтения.Вы можете пропустить перерыв;если результат условия одинаков и улучшенный синтаксис заключается в использовании фигурных скобок внутри каждого условия:

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