如果可读性有条件,我怎么能整理多个?

时间:2011-08-02 16:52:07

标签: php if-statement for-loop foreach

如果条件具有可读性,我如何整理多个?

例如,

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,但我认为我错了!

5 个答案:

答案 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 = ?";
}