2016-05-15 32 views
0

我希望能夠根據函數輸入更新對象中的關聯數組,但是我不知道如何執行此操作。這是我的問題。比方說,有一個在我的對象這個數據容器:PHP:通過類函數更新關聯數組?

private $vars = Array 
(
    ['user_info'] = Array 
    (
    ['name'] => 'John Doe' 
    ['id'] => 46338945 
    ['email'] => '[email protected]' 
    ['age'] => 35 
) 
    ['session_info'] = Array 
    (
    ['name'] => 'session_name' 
    ['id'] => 'mGh44Jf0nfNNFmm' 
) 
) 

,我有一個公共職能update改變這些值:

public function update($keys, $changeValueTo) { 
    if (!is_array($keys)) { 
    $keys = array($keys); 
    } 
    nowWhat(); 
} 

最終,我只是希望能夠的東西轉換成這樣

array('user_info', 'name') 

到這一點:

$this->vars['user_info']['name'] 

所以我可以將它設置爲等於$equalTo參數。

這通常不會是一個問題,但在這種情況下,我不知道$vars陣列的架構,因此我不能編寫基於固定數量的密鑰的foreach語句。我也不能只公開$vars,因爲每次改變某個東西時,函數都需要在對象內部做些什麼。

我擔心這是一個遞歸場景,涉及到eval()。你會推薦什麼?

回答

1

這並不難。您需要通過引用和循環來實現傳遞變量。不需要eval()

$var = array(
    "user_info" => array(
     "name" => "Visal" 
    ) 
); 

function update(&$var, $key, $value) { 
    // assuming the $key is an array 
    $t = &$var; 
    foreach ($key as $v) { 
     $t = &$t[$v]; 
    } 

    $t = $value; 
} 

update($var, array("user_info", "name"), "Hello World"); 
var_dump($var); 
+0

它的工作!我仍然不清楚通過引用傳遞變量是什麼意思,我肯定需要對此做一些研究。謝謝! – Jonesy