PHP:通过类函数更新关联数组?

时间:2016-05-15 01:48:15

标签: php arrays recursion

我希望能够根据函数输入更新对象中的关联数组,但我对如何执行此操作感到茫然。这是我的问题。让我们说我的对象中有这个数据容器:

private $vars = Array
(
  ['user_info'] = Array
  (
    ['name'] => 'John Doe'
    ['id'] => 46338945
    ['email'] => 'johndoe@example.com'
    ['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 个答案:

答案 0 :(得分: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);