我有一个数组$report
:
Array
(
[03.05.2016] => Array
(
[tasks] => Array
(
[group1] => to change
)
[start] => 8:00
[end] => 16:00
)
)
和第二个数组$keys
:
Array
(
[0] => 03.05.2016
[1] => tasks
[2] => group1
)
和变量$value
,其值为CHANGED
我正在寻找一种方法来改变
的价值$report[03.05.2016][tasks][group1]
这样我的最终数组将是:
(
[03.05.2016] => Array
(
[tasks] => Array
(
[group1] => CHANGED
)
[start] => 8:00
[end] => 16:00
)
)
有人可以帮助我吗?
答案 0 :(得分:1)
尝试$report[$keys[0]][$keys[1]][$keys[2]] = $value;
答案 1 :(得分:1)
您可以查看$report
变量,通过引用分配每个"步骤"在$keys
数组中,然后将最终级别更改为新值。
编辑: 这种方法的优点是它可以适用于任何级别,但如果你总是只有三步,那么@ zakhefron的答案就更清楚了。
<?php
$report = [
'03.05.2016' => [
'tasks' => [
'group1' => 'to change'
],
'start' => 8:00
'end' => 16:00
]
];
$keys = ['03.05.2016', 'tasks', 'group1'];
$value = 'CHANGED';
// Start at the top level of $report
$target =& $report;
// Then work down through the keys
while ($key = array_shift($keys))
{
$target =& $target[$key];
}
// Finally, set the final target to the new value
$target = $value;
print_r($report);
=
Array
(
[03.05.2016] => Array
(
[tasks] => Array
(
[group1] => CHANGED
)
[start] => 8:00
[end] => 16:00
)
)
答案 2 :(得分:1)
这里可以使用递归函数方法,将源,键和值传递给函数。它将检查数组中是否存在键,如果找到,则使用剩余数据,键和值调用相同的函数。
最后,当所有搜索到的键时,键都空了,现在你可以简单地更新值,然后返回true,否则返回false,如果找不到的话。
$report = array(
'03.05.2016' => array(
'tasks' => Array(
'group1' => 'to change'
),
'start' => '8:00',
'end' => '16:00'
));
$keys = array(
'03.05.2016',
'tasks',
'group1'
);
$value = 'CHANGED';
function updateValue(&$source, $keys, $value) {
$keysCount = count($keys);
if(empty($keys)) {
$source = $value;
return true;
}
foreach($keys as $key) {
if(isset($source[$key])) {
array_shift($keys);
return updateValue($source[$key], $keys, $value);
}
else return false;
}
}
updateValue($report, $keys, $value);
print_r($report);
看到它正常工作:https://eval.in/589461