我想更改递归数组的值。
一个数组为变量提供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,但我不知道如何修复它。
答案 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
)
)
)
)