2011-08-04 105 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(); 
}