我希望能够根据函数输入更新对象中的关联数组,但我对如何执行此操作感到茫然。这是我的问题。让我们说我的对象中有这个数据容器:
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()
的递归方案。你会推荐什么?
答案 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);