2011-08-02 40 views
2

如果條件可讀,我該如何整理多個?如果條件可讀,我該如何整理多個?

例如,

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

您可以使用[switch語句(http://php.net/manual/en/control-structures.switch.php) – Ibu

回答

2

您可以使用in_array

if (!in_array($key, array('pg_id', 'pg_tag', 'pg_user')) 
+0

打我給它。 +1 – AlienWebguy

+0

感謝您的回答! – laukok

2

一個可能的解決辦法是把每個條件在它自己的行:

foreach($editable_fields as $key) 
{ 
    if($key != 'pg_id' && 
     $key != 'pg_tag' && 
     $key != 'pg_user' ) 
    { 
     $sql_pattern[] = "$key = ?"; 
    } 
} 

我覺得這是澄清這些類型的複合條件我。

0

因此,使用換行符:

if($key != 'pg_id' && 
    $key != 'pg_tag' && 
    $key != 'pg_user' 
){ 
    $sql_pattern[] = "$key = ?"; 
} 

使得它更具有可讀性。

A switch -statement僅用於測試一種情況。就像你會檢查一個號碼一樣。

$number = 12; 
switch($number){ 
    case 1: 
    // Do stuff... 
    case [...] 
} 
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; 
} 
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 = ?"; 
}