更改递归数组的内部值

时间:2013-06-11 10:14:13

标签: php arrays scope

我想更改递归数组的值。

一个数组为变量提供path

$scopePath表示要改变的路径。

例如if $scopePath==Array("owners","products","categories")

和$ tag =“price”;

我想将$value["owners"]["products"]["categories"]["tag"]更改为true

    $u=$value;
    foreach ($scopePath as $i => $s) {
        if (!isset($u[$s]))
            $u[$s]=Array();
        $u=$u[$s];
    }
    $u[$tag]=true;

我知道问题是由于$ u = $ u [$ s]这一行,因为这会将引用更改为$ u,但我不知道如何修复它。

2 个答案:

答案 0 :(得分:1)

要更改$value变量,您必须在第一行使用&

$u = &$value;

答案 1 :(得分:1)

$u引用$value$value内的元素。

$u = &$value;
foreach($scopePath as $i => $s) {
    if (!isset($u[$s]))
        $u[$s]=Array();
    $u = &$u[$s];
}
$u["tag"] = true;

$scopePath = array("owners","products","categories")

print_r($value);

将输出

Array
(
    [owners] => Array
        (
            [products] => Array
                (
                    [categories] => Array
                        (
                            [tag] => 1
                        )
                )
        )
)