2013-04-20 88 views
0

我有一個名爲get_variable的函數,它從數據庫中獲取一個變量的值。如何解析CodeIgniter視圖內的字符串中的變量?

比方說,我的變量(存儲在數據庫)的值是一樣的東西:「我喜歡$果」

我想通過這個字符串,$果轉化爲正確的值,上我的看法。

我有以下設置(如下僞代碼):

$details['fruit'] = 'apples'; 
$details['test'] = get_variable('my_variable_name'); 

$var = $CI->load->view('viewname',$details,TRUE); 

問題是什麼,我認爲($ VAR)的輸出是「我喜歡$果」

我想要什麼是「我喜歡蘋果」

我覺得我在這裏錯過了一個步驟,也許與變量變量? (http://php.net/manual/en/language.variables.variable.php),但不知道如何讓它表現。任何洞察力將不勝感激。

+0

你能發佈您的視圖代碼嗎? – 2013-04-20 17:09:44

回答

0

如果您確定在數據庫中的變量是安全的(只有你可以改變它們),你可以EVAL像這樣的GET變量函數的代碼:

function get_variable($var, $data = array()) 
{ 
    // Here the code that gets the variable from the database 
    $db_var = 'I like $fruit'; 
    extract($data); 

    $return = ''; 
    eval('$return = "' . $db_var . '"'); 

    return $return; 
} 

// And then use this in the controller: 
$details['test'] = get_variable('my_variable_name', $details); 

但是,當數據庫變量訪問由其他人,你真的不想使用eval(真的不!)。而是使用某種形式的模板,如「我喜歡%fruit%」,並使get_variable看起來像這樣:

function get_variable($var, $data = array()) 
{ 
    // Here the code that gets the variable from the database 
    $db_var = 'I like $fruit'; 
    extract($data); 

    $return = $db_var; 
    foreach($data as $var => $value) { 
    $return = str_replace('%'.$var.'%', $value, $return); 
    } 

    return $return; 
} 

// And then use the same method in the controller: 
$details['test'] = get_variable('my_variable_name', $details); // This makes all variables in details available in the database variable