Как я могу написать это 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' )
и в какой-то момент он может вырасти долго.
(Заимствование из предыдущего вопроса, который, по моему мнению, породил этот : короткая строка для обновления строки таблицы в базе данных? )
$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 ));
Используйте 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(...)); }
Условие переключения, вероятно, будет быстрее (таблица перехода) и немного легче читать. Вы можете пропустить перерыв; если результат условия тот же, а улучшенный синтаксис – использовать фигурные скобки внутри каждого условия:
switch ($k) { case 'pg_id': case 'pg_tag': case 'pg_user': { break; } default: { $result = $connection->run_query($sql,array(...)); } }