如果条件具有可读性,我如何整理多个?
例如,
if( $key != 'pg_id' && $key != 'pg_tag' && $key != 'pg_user' )
当这种情况下的物品变长时,这会让我感到困惑。
在以下这种情况下使用它 - foreach()
,
$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 = ?";
}
我在考虑使用switch,但我认为我错了!
答案 0 :(得分:2)
一种可能的解决方案是将每个条件放在它自己的行上:
foreach( $editable_fields as $key )
{
if( $key != 'pg_id' &&
$key != 'pg_tag' &&
$key != 'pg_user' )
{
$sql_pattern[] = "$key = ?";
}
}
我发现这可以为我澄清这些类型的复合条件。
答案 1 :(得分:2)
您可以使用in_array
:
if (!in_array($key, array('pg_id', 'pg_tag', 'pg_user'))
答案 2 :(得分:0)
所以,使用换行符:
if( $key != 'pg_id' &&
$key != 'pg_tag' &&
$key != 'pg_user'
){
$sql_pattern[] = "$key = ?";
}
使其更具可读性。
switch
- 语句仅用于测试一个条件。就像你要检查一个号码一样。
$number = 12;
switch($number){
case 1:
// Do stuff...
case [...]
}
答案 3 :(得分:0)
你可以把它展开:
if(
$key != 'pg_id' &&
$key != 'pg_tag' &&
$key != 'pg_user'
) {
/* code here */
$sql_pattern[] = "$key = ?"
}
...或使用switch语句
switch ($key) {
default:
/* code here */
$sql_pattern[] = "$key = ?"
break;
case 'pg_id':
case 'pg_tag':
case 'pg_user':
break;
}
答案 4 :(得分:0)
重构为具有描述其目的的名称的函数:
function KeyIsNotMatch($key) {
if( $key != 'pg_id' && $key != 'pg_tag' && $key != 'pg_user' )
return true;
else
return false;
}
foreach( $editable_fields as $key )
{
if (KeyIsNotMatch($key)) $sql_pattern[] = "$key = ?";
}