2014-02-06 52 views
1

這是一個比功能更多風格的問題。目前我使用下面的代碼來產生一個已經通過函數中的各種正則表達式的值的數組。PHP使用數組或提取變量?

但是這意味着必須引用最後一個數組,當向SQL查詢添加大量值時,與直接變量相比,開始看起來相當混亂。

我可以在調用函數後將數組提取到變量,但是想知道是否有某種方法可以在函數內部執行此操作,並且不會遇到範圍問題或實際上應避免使用直接變量並堅持使用陣列?

<?php 

function formData($form_vars) 
{ 
    $regex_array = array(
     'alpha_num' => "/[^a-zA-Z0-9[:space:][:blank:]]/", 
     'basic'  => "/[^a-zA-Z0-9[:space:][:blank:],.\\'()&-]/" 
    ); 

    foreach ($form_vars as $key => $var) { 
     $regex = $regex_array[$var]; 
     $val = preg_replace($regex, '', $_REQUEST[$key]); 
     $vars[$key] = $val; 
    } 

    return $vars; 
} 

$vars = array(
    'address_one' => "basic", 
    'address_two' => "basic", 
    'address_three' => "basic", 
    'postal'  => "alpha_num" 
); 

$vars = formData($vars); 

echo $vars['address_one']; 

?> 

回答

0

要上點你的問題,而不是分歧的其他事情,我想提出意見:

$regex_array(我會打電話$softTypeFilters)和$vars(我會打電話$fieldSoftTypes)現在可以被展示爲一個配置文件。所以我會堅持這一點,而不是使用你的其他建議。你可能會失去這個非常強大的功能(可配置性)。代碼仍然易於閱讀。

+0

$ var會在每次使用不同的表單時發生變化,所以無法進入配置文件。 – user1209203

+0

也爲表單命名,並使用該名稱(或URL?)從該兩級數組中獲取軟類型:「」。 '。 – pid

+0

這個網站有這麼多的表單,會創建一個非常繁瑣的文件 – user1209203

0

你並不需要提取$vars,可以用它來構建查詢更方便(用function build_query($var)例如,與其他環)

編輯的相關詳細的回答:我想是這樣的:

<?php 


function formData($vars, $alias) 
{ 
    foreach($_POST as $k => $v) 
    { 
    // skip unknown fields 
    if (!isset($vars[$k])) 
     continue; 
    // deal with input names != field name 
    $field_name = isset($form_alias[$k])?$form_alias[$k]:$k; 

    $vars[$key] = preg_replace($regex, '', $_REQUEST[$key]); 
    if (function_exists('preprocess_'.$key)) 
     $vars[$key] = call_user_func('preprocess_'.$key, $vars[$key]); 
    } 
    return $vars; 
} 

function buildQuery($vars) 
{ 
    $sql = ''; 
    // use a query builder, PDO prepared statements or anything 
    foreach($vars as $field => $value) 
    { 
    // ... 
    } 
    return $sql; 
} 

$vars = array(
    'address_one' => "basic", 
    'address_two' => "basic", 
    'address_three' => "basic", 
    'postal'  => "alpha_num", 
); 
$form_alias = array(
    'address1' => "address_one", 
    'address2' => "address_two", 
    'address3' => "address_three", 
); 

$vars = formData($vars, $form_alias); 

$query = buildQuery($vars); 
+0

只有在db字段名與數組鍵相關的情況下才會出現這種情況,我還需要進行一些預處理,直接變量會更容易閱讀。 – user1209203

+0

更好的解決方案是使用php類,對象模型和方法來驗證和格式化數據 – Asenar