根据其他数组值中的键将数组值替换为另一个值

Replace array value with another value based on keys from other array values

我有一个数组 $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
)

和一个值为 CHANGED

的变量 $value

我正在寻找一种方法来更改

的值
$report[03.05.2016][tasks][group1]

所以我的最终数组将是:

(
    [03.05.2016] => Array
        (
            [tasks] => Array
                (
                    [group1] => CHANGED
                )

            [start] => 8:00
            [end] => 16:00
        )

)

有人可以帮助我吗?

尝试$report[$keys[0]][$keys[1]][$keys[2]] = $value;

Refer : https://3v4l.org/0HBUH

您可以深入研究 $report 变量,通过引用为 $keys 数组中的每个 "step" 赋值,然后将最终级别更改为您的新值。

编辑: 这种方法的优点是它适用于任意数量的级别,但如果你总是只有三个步骤,那么@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
        )

)

您可以在这里使用递归函数方法,将源、键和值传递给函数。它将检查键是否存在于数组中,如果找到则使用剩余数据、键和值调用相同的函数。

最后键在所有键都被搜索时留空,现在您可以简单地更新值,并且 return 为真,否则 return 如果找不到则为假。

$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