2011-08-04 5 views
0

アイデア?とにかく二ケース$ vは、私がIS_ARRAY($ V)を行うことができ、配列 ですが、私は場合/他を繰り返さなければならないと思いで この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(); 
}