2011-08-04 107 views
0

有什麼想法? 在第二種情況下$ v是一個數組 我可以做is_array($ V),但我不得不重複的if/else反正簡化這個PHP代碼?

兩個循環
foreach(array('city', 'location') as $f) { 
     $ors[$f] = array(); 

     if (!isset($_POST[$f])) continue; 

     $v = $_POST[$f]; 
     if (isset($df[$f][$v])) { 
       array_push($ors[$f], $df[$f][$v]); 
     } 
     else { 
       security_error(); 
     } 
} 

foreach(array('age', 'sex') as $f) { 
     $ors[$f] = array(); 

     if (!isset($_POST[$f])) continue; 

     foreach($_POST[$f] as $v) { 
       if (isset($df[$f][$v])) { 
         array_push($ors[$f], $df[$f][$v]); 
       } 
       else { 
         security_error(); 
       } 
     } 
} 
+0

我不太喜歡的代碼是如何設置的。 'security_error()'做了什麼?另外,'$ df'是什麼? – NullUserException

回答

1
function pushIfSetOrSecurityError($source, $target, $key) { 
     if (isset($source[$key])) 
       array_push($target, $source[$key]); 
     else 
       security_error(); 
} 

foreach(array('city', 'location') as $f) { 
     $ors[$f] = array(); 
     if (isset($_POST[$f])) 
       pushIfSetOrSecurityError($df[$f], $ors[$f], $_POST[$f]); 
} 

foreach(array('age', 'sex') as $f) { 
     $ors[$f] = array(); 
     if (isset($_POST[$f])) 
       foreach($_POST[$f] as $v) 
         pushIfSetOrSecurityError($df[$f], $ors[$f], $v); 
} 
+1

總是使用大括號! – IvanGL

+0

永遠服從教條! ;) –

2

使用三元條件運算符:

$result = isset($df[$f][$v]) ? array_push($ors[$f], $df[$f][$v]) : security_error(); 

和/或功能:

function pushIfSetOrSecurityError($source, $target, $key) { 
    $result = isset($source[$key]) ? array_push($target, $source[$key]) : security_error(); 
}